周立功写给单片机学习者
周立功单片机 入门级XMOS专业培训-V1.00
Pin引脚
还有PLL、PCU、 Clock block、 Boot ROM等 8KB的OTP
64KB的 RAM
XMOS内部架构及资源
型号
Xcore数量 逻辑核数量 工作频率 SRAM大小 XS1-L1 1 8 400 / 500 64 KBytes XS1-L2 2 16 800 / 1000 128 KBytes XS1-G4 4 32 1600 256 KBytes
XMOS的优势
5
丰富的IP核
XMOS目前已经发布将近80多个IP核。这些IP核涉及接口类型、数据处理类型、 协议类型等,且都是经过严格验证,具有可移植性强、组合灵活等特点。大大 降低了研发设计难度,客户可以利用这些现成的IP核进行产品的快速开发和升级!
6
高安全性
XMOS包含片上的OTP和高安全性的AES加密模块,允许用户将验证和加密 了的代码存入外部SPI Flash中,而将解密密匙存入到OTP中。而且,在加密 之后,可以禁能JTAG、Xlink等读取OTP的内容,大大保障客户的知识产权!
FPGA
ቤተ መጻሕፍቲ ባይዱ
性能对比(同等价格条件下)
DSP FPGA
MCU
XMOS的极限
I/O 时钟
XMOS的I/O最高工作输入输出频率为60MHz。
XMSO内部时钟标准为100MHz,可输出50MHz的内部时钟。
Lcore
功耗
每个逻辑核的最高工作频率为125MHz。
每个Xcore的电流平均为14mA,多Xcore器件其电流将翻倍甚至更高。
Logic core 0 Logic core 0
通道、开关、连接
通道、开关、连接
Logic core 1
周立功谈我的25年嵌入式生涯
有些理念,很值得工程师们思考!
周立功,男,1964年3月出生,毕业于东华大学自动化及计算机系,高级工程师,中国单片机学会理事,中国海洋大学讲座教授,硕士生导师,主要研究方向为嵌入式系统与现场总线,目前正在从事80C51、ARM与Nios II等软核SoC的研究与开发。
下面我会把我“第一桶金”的故事告诉你,这也是尽量减少“阶段0”开发一个非常典型的例子。
当年,《羊城晚报》几乎每天都有半版广告刊登信息台(听歌、悄悄话等)广告,一打听广告费每天几十万。当时相信不少人在利用公费电话在拨打这些信息台。后来我送货到客户那里发现电话机都外加了一个铁壳并上了一把锁,从看到那一幕开始,我决定做电话加密码锁,锁长途电话0字头,手机、BB机、信息台的9字头。通过朋友介绍,福州某公司有这个技术,于是我打了一个试探性的电话,使用5000元购买方案和源代码,对方非常爽快地同意了。我生怕有变立即坐飞机到福州去,很快就见到了郑新建工程师,他原来在福州某公司工作,我见到他的时候已经离开了福州某公司,但仍然自己写一些产品解决方案,通过福州某公司销售。买到方案与源代码之后,我立即带样机到各地去做测试,发现这台样机兼容性太差,而且市场已经开始在卖的产品也存在同样的问题,我想只要解决好兼容性的问题,如果在任何地区交换机局域网都能够使用,那就是最好的产品不愁没有市场。
也许有程序员会关心JTAG开发工具问题,那也是一个“外包”的项目。当时,我们在网上发现了一个由计算机爱好者业余时间设计的H-JTAG,这是一个比较稳定的调试器软件,正好适合我们使用。于是我就同设计者联系,并决定由周立功单片机资助他继续开发,同时,其开发成果还免费提供给网上的用户下载,保证它作为一个自由软件。其实,无论是Linux还是H-JTAG都是开源软件,如果担心其它的同行因此受益而超越自己的话,难免需要在公司负担很多开发人员,面面俱到地做许多事实上是重复的开发工作。其实,我们的合作伙伴都是所在领域的专家,如果自己从头到尾去学习和开发,不仅抢了合作伙伴的饭碗,而且结果未必理想。这种情况下不但会延误宝贵的商机,而且还会影响与合作伙伴之间的关系。其实只要引入我们企业长期积累和制定的嵌入式系统工程管理思想和规范,即可得到自己想要的结果:“做你最擅长的,其余的外包”,类似这样的案例在周立功单片机将会越来越多。
周立功 LPC2000系列ARM微控制器应用开发教程说明书
个人电脑已经是64位了,您还在使用8位微控制器吗?尽管一般情况下嵌入式系统对CPU处理能力的要求比个人电脑(对CPU处理能力的要求)低,但随着人们生活的提高和技术的进步,嵌入式系统对CPU处理能力的要求也稳步的提高,大量高速的与MCS51体系结构兼容的微控制器的出现就证明了这一点。
但8位微控制器受限于体系结构,处理能力的提高始终有限。
而16位系统在性能上与8位机相比始终没有太大优势,成本上与32位系统相比也没有什么优势,未来一段时间嵌入式微控制器的发展方向必然是32位系统。
基于ARM体系结构的32位系统占领了32位嵌入式系统的大部分分额,但长期以来,基于ARM体系结构的32位系统仅在嵌入式式系统的高端(通讯领域、PDA)等场合使用,要么以专用芯片的面貌出现,要么以位处理器的庙貌出现,并没有出现性价比高的通用的微控制器。
PHILIPS发现了这个空当,推出了性价比很高LPC2000系列微控制器,让更多的嵌入式系统具有32位的处理能力。
这也预示着32位系统即将成为嵌入式系统的主流。
基于ARM体系结构的芯片在中国推广已经有好几年了,关于ARM的图书也出了不少。
关于ARM的图书主要有以下几类:1.关于ARM内核的图书,主要读者是芯片设计者,内容主要是介绍芯片设计的。
2.芯片应用类图书,主要是芯片的生产商或代理商编写,主要读者为应用工程师。
3.开发板类图书,主要介绍相应的ARM开发板,给应用者一些参考。
以上3类图书的侧重点都不是ARM应用开发教学,用于大学本科教学不太适合。
为了方便高等院校教学方便,笔者编写了这本教材。
不过,因为嵌入式系统牵涉的知识太广,一本教材无法深入论述。
为此,笔者还会推出多本被套图书以便学生知识扩展。
第1章嵌入式系统概述 (1)1.1嵌入式系统 (1)1.1.1 现实中的嵌入式系统 (1)1.1.2 嵌入式系统的概念 (2)1.1.3 嵌入式系统的未来 (2)1.2嵌入式处理器 (2)1.2.1 简介 (2)1.2.2 分类 (3)1.3嵌入式操作系统 (4)1.3.1 简介 (4)1.3.2 基本概念 (5)1.3.3 使用实时操作系统的必要性 (8)1.3.4 实时操作系统的优缺点 (8)1.3.5 常见的嵌入式操作系统 (8)第2章嵌入式系统工程设计 (14)2.1嵌入式系统项目开发生命周期 (14)2.1.1 概述 (14)2.1.2 识别需求 (15)2.1.3 提出方案 (17)2.1.4 执行项目 (19)2.1.5 结束项目 (21)2.2嵌入式系统工程设计方法简介 (22)2.2.1 由上而下与由下而上 (22)2.2.2 UML系统建模 (22)2.2.3 面向对象OO的思想 (23)第3章ARM7体系结构 (25)3.1简介 (25)3.1.1 ARM (25)3.1.2 ARM的体系结构 (25)3.1.3 ARM处理器核简介 (26)3.2ARM7TDMI (27)3.2.1 简介 (27)3.2.2 三级流水线 (28)3.2.4 存储器接口 (28)3.3ARM7TDMI的模块和内核框图 (29)3.4体系结构直接支持的数据类型 (31)3.5处理器状态 (32)3.6处理器模式 (32)3.7内部寄存器 (33)3.7.1 简介 (33)3.7.2 ARM状态寄存器集 (33)3.7.3 Thumb状态寄存器集 (35)3.8程序状态寄存器 (37)3.8.1 简介 (37)3.8.2 条件代码标志 (38)3.8.3 控制位 (38)3.8.4 保留位 (39)3.9异常 (39)3.9.1 简介 (39)3.9.2 异常入口/出口汇总 (39)3.9.3 进入异常 (40)3.9.4 退出异常 (41)3.9.5 快速中断请求 (41)3.9.6 中断请求 (41)3.9.7 中止 (41)3.9.8 软件中断指令 (42)3.9.9 未定义的指令 (42)3.9.10 异常向量 (42)3.9.11 异常优先级 (43)3.10中断延迟 (43)3.10.1 最大中断延迟 (43)3.10.2 最小中断延迟 (44)3.11复位 (44)3.12存储器及存储器映射I/O (44)3.12.1 简介 (44)3.12.2 地址空间 (44)3.12.3 存储器格式 (45)3.12.4 未对齐的存储器访问 (46)3.12.5 指令的预取和自修改代码 (47)3.13寻址方式简介 (51)3.14ARM7指令集简介 (52)3.14.1 简介 (52)3.14.2 ARM指令集 (52)3.14.3 Thumb指令集 (54)3.15协处理器接口 (56)3.15.1 简介 (56)3.15.2 可用的协处理器 (56)3.15.3 关于未定义的指令 (57)3.16调试接口简介 (57)3.16.1 典型调试系统 (57)3.16.2 调试接口 (58)3.16.3 EmbeddedICE-RT (58)3.16.4 扫描链和JTAG接口 (59)3.17ETM接口简介 (59)第4章ARM7TDMI(-S)指令系统 (61)4.1ARM处理器寻址方式 (61)4.2指令集介绍 (64)4.2.1 ARM指令集 (64)4.2.2 Thumb指令集 (90)第5章LPC2000系列ARM硬件结构 (112)5.1简介 (112)5.1.1 描述 (112)5.1.2 特性 (112)5.1.3 器件信息 (113)5.1.4 结构概述 (113)5.2引脚配置 (114)5.2.1 引脚排列及封装信息 (114)5.2.2 LPC2114/2124的引脚描述 (116)5.2.3 LPC2210/2212/2214的引脚描述 (120)5.2.4 引脚功能选择使用示例 (126)5.3存储器寻址 (126)5.3.1 片内存储器 (126)5.3.3 存储器映射 (127)5.3.4 预取指中止和数据中止异常 (131)5.3.5 存储器重映射及引导块 (132)5.3.6 启动代码相关部分 (134)5.4系统控制模块 (136)5.4.1 系统控制模块功能汇总 (136)5.4.2 引脚描述 (137)5.4.3 寄存器描述 (137)5.4.4 晶体振荡器 (138)5.4.5 复位 (139)5.4.6 外部中断输入 (142)5.4.7 外部中断应用示例 (145)5.4.8 存储器映射控制 (146)5.4.9 PLL(锁相环) (148)5.4.10 VPB分频器 (153)5.4.11 功率控制 (154)5.4.12 唤醒定时器 (156)5.4.13 启动代码相关部分 (156)5.5存储器加速模块(MAM) (158)5.5.1 描述 (158)5.5.2 MAM结构 (159)5.5.3 MAM的操作模式 (160)5.5.4 MAM配置 (161)5.5.5 寄存器描述 (161)5.5.6 MAM使用注意事项 (162)5.5.7 启动代码相关部分 (162)5.6外部存储器控制器(EMC) (163)5.6.1 特性 (163)5.6.2 概述 (163)5.6.3 引脚描述 (164)5.6.4 寄存器描述 (164)5.6.5 外部存储器接口 (166)5.6.6 典型总线时序 (168)5.6.7 外部存储器选择 (168)5.6.8 启动代码相关部分 (169)5.7引脚连接模块 (170)5.7.1 介绍 (170)5.7.2 寄存器描述 (170)5.7.3 引脚功能控制 (173)5.7.4 启动代码相关部分 (173)5.8.1 特性 (175)5.8.2 描述 (175)5.8.3 结构 (176)5.8.4 寄存器描述 (177)5.8.5 中断源 (181)5.8.6 VIC使用事项 (183)5.8.7 VIC应用示例 (184)5.8.8 启动代码相关部分 (185)5.9GPIO (186)5.9.1 特性 (186)5.9.2 应用 (186)5.9.3 引脚描述 (187)5.9.4 寄存器描述 (187)5.9.5 GPIO使用注意事项 (189)5.9.6 GPIO应用示例 (189)5.10UART 0 (189)5.10.1 特性 (189)5.10.2 引脚描述 (190)5.10.3 应用 (190)5.10.4 结构 (190)5.10.5 寄存器描述 (191)5.10.6 使用示例 (198)5.11UART1 (200)5.11.1 特性 (200)5.11.2 引脚描述 (200)5.11.3 应用 (201)5.11.4 结构 (202)5.11.5 寄存器描述 (203)5.12I2C接口 (211)5.12.1 特性 (211)5.12.2 应用 (211)5.12.3 引脚描述 (211)5.12.4 I2C接口描述 (211)5.12.5 I2C操作模式 (214)5.12.6 寄存器描述 (225)5.13SPI接口 (228)5.13.1 特性 (228)5.13.2 引脚描述 (228)5.13.3 描述 (229)5.13.5 寄存器描述 (235)5.14定时器0和定时器1 (237)5.14.1 描述 (237)5.14.2 特性 (237)5.14.3 应用 (238)5.14.4 管脚描述 (238)5.14.5 结构 (239)5.14.6 寄存器描述 (239)5.14.7 定时器举例操作 (244)5.14.8 使用示例 (245)5.15脉宽调制器(PWM) (247)5.15.1 特性 (247)5.15.2 引脚描述 (248)5.15.3 描述 (248)5.15.4 结构 (249)5.15.5 寄存器描述 (251)5.15.6 使用示例 (256)5.16A/D转换器 (258)5.16.1 特性 (258)5.16.2 描述 (258)5.16.3 引脚描述 (258)5.16.4 寄存器描述 (259)5.16.5 操作 (261)5.16.6 使用示例 (261)5.17实时时钟 (262)5.17.1 特性 (262)5.17.2 描述 (262)5.17.3 结构 (262)5.17.4 RTC中断 (263)5.17.5 闰年计算 (264)5.17.6 寄存器描述 (264)5.17.7 混合寄存器组 (265)5.17.8 完整时间寄存器 (267)5.17.9 时间计数器组 (268)5.17.10 报警寄存器组 (269)5.17.11 基准时钟分频器(预分频器) (269)5.17.12 RTC使用注意事项 (271)5.17.13 使用示例 (271)5.18看门狗 (274)5.18.2 应用 (274)5.18.3 描述 (274)5.18.4 结构 (275)5.18.5 寄存器描述 (275)5.18.6 使用示例 (277)5.19本章小结 (278)第6章接口技术与硬件设计 (280)6.1最小系统 (280)6.1.1 框图 (280)6.1.2 电源 (280)6.1.3 时钟 (284)6.1.4 复位及复位芯片配置 (284)6.1.5 存储器系统 (287)6.1.6 调试与测试接口 (288)6.1.7 完整的最小系统 (289)6.2片内外设 (291)6.2.1 GPIO(通用I/O) (291)6.2.2 UART、MODEM (295)6.2.3 I2C (298)6.2.4 SPI (304)6.3总线接口 (308)6.3.1 并行SRAM (308)6.3.2 并行FALSH (314)6.3.3 USB(D12)接口 (328)6.3.4 液晶接口 (332)6.3.5 网络接口 (341)6.4其它外设 (350)6.4.1 并行打印机接口 (350)6.4.2 CF卡及IDE硬盘接口 (356)第7章移植µC/OS-II到ARM7 (362)7.1µC/OS-II简介 (362)7.1.1 概述 (362)7.1.2 µC/OS-II的特点 (362)7.2移植规划 (363)7.2.1 编译器的选择 (363)7.2.2 任务模式的取舍 (363)7.3移植µC/OS-II (363)7.3.1 概述 (363)7.3.2 关于头文件includes.h和config.h (364)7.3.3 编写OS_CPU.H (365)7.3.4 编写Os_cpu_c.c文件 (366)7.3.5 编写Os_cpu_a.s (371)7.3.6 关于中断及时钟节拍 (374)7.4移植代码应用到LPC2000 (376)7.4.1 编写或获取启动代码 (376)7.4.2 挂接SWI软件中断 (376)7.4.3 中断及时钟节拍中断 (377)7.4.4 编写应用程序 (377)7.5本章小结 (379)第8章嵌入式系统开发平台 (380)8.1如何建立嵌入式系统开发平台 (380)8.1.1 使用平台开发是大势所趋 (380)8.1.2 建立开发平台的方法 (383)8.1.3 编写自己的软件模块 (384)8.2数据队列 (384)8.2.1 简介 (384)8.2.2 API函数集 (384)8.3串口驱动 (387)8.3.1 简介 (387)8.3.2 API函数集 (387)8.4MODEM接口模块 (389)8.4.1 简介 (389)8.4.2 MODEM的状态 (389)8.4.3 API函数集 (389)8.5I2C总线模块 (390)8.5.1 简介 (390)8.5.2 API函数集 (391)8.6SPI总线模块 (392)8.6.1 简介 (392)8.6.2 API函数集 (392)第1章嵌入式系统概述1.1 嵌入式系统经过几十年的发展,嵌入式系统已经在很大程度改变了人们的生活、工作和娱乐方式,而且这些改变还在加速。
周立功成功的经验
我们的目标就是做到嵌入式系统的NO.1。一个人一个企业如果没有目标感,你想做马马虎虎挣些钱,那么你可能三流企业都作不到,如果是一流企业,就要一切按照目标努力,也是成功的。也不能说只有第一才是成功的。所有方面都是这样的,人才也是这样看待的,没有理由做不好。
我还在学MBA,把一些好的经验拿来用,先相信别人,因为你没有经验。先把它的经验照搬,固定下来,如果适合就继续,不适合慢慢修改,直到修改到适合企业的发展。但这个方法也不是一成不变的,因为企业发展到一定阶段企业文化是不一样的。小企业求生存,到一定程度后要有企业文化,规模不等运营方法也不一样,中小型公司就是靠备现货,反应快、便捷、上门服务。公司发展到一定规模后,中小客户将不再做,因为面太广,太多,需要很多人服务,付出的精力很大,开薪水开支很大,不足以支撑大企业运营,进入资本营运了。大公司靠放款,进行资本运作,还靠物流和大客户。所以大公司和中小公司的运作模式方法完全不一样。大公司讲究覆盖,中小客户要求判断力,备货(尽快交货),比较好的价钱等等各个方面来适应他,这是大公司做不到的,他一年计划性很强。小公司就靠判断力,靠经验、能力、眼光,科学的经验去冒险做库存,没有吃准就惨了,资金链断裂,所以小公司一般都不会赊款,小公司靠转得快。
中国产业最薄弱在研发,产业成本可以很低。我分析一下薄弱的原因在哪里:第一,老板本身不是技术专家,不知道在哪里深入投入、投入多少人员资金,需要什么样的人才,他不懂,因此不成功。懂的人呢,不一定有很好的管理经验,他也不是主要领导,有职业风险。中国还有一个特点是失败了就要下台,一旦失败就给换。所以说,他有能力想投入,一他本身怕失败,第二可能没有人相信他,第三一旦失败后果可想而知。。现在有好的环境,好的机会,何必去冒险?所以为什么说创业者往往容易成功,是因为往往创业者是专家,是一步一步走过来的,他对投入上的想法和别人不一样。中国很多大企业大多没有流程、制度是表面的,不是靠流程化来保证企业运作,每个环节都有折扣,投入不到位。如果我是李东生,我不是现在做手机,而是五年前六年前开始做手机做design。作为TCL、联想这么大的企业不做手机难道是周立功做吗,我认为他们没有远见,不敢真正投入研发,什么叫快,不是渠道、贸易、组装,那是低层次的品牌宣传,应是研发更快。等国家发放牌照之后从韩国买板来组装、修改开发,利润都让给别人了,如果5、10年前开始研发那才是真正叫快,才能立于不败之地,我觉得这才是具备了远见。所以说为什么很多中国企业没有研发,没有远见所以永远尝不到研发的甜头,不会有决心可持续投入去研发,不敢承担研发风险,没有尝到甜头,一旦尝到了就会可持续发展地投入。研发是一个企业可持续发展的源泉。
周立功单片机 Verilog 黄金参考指南说明书
Verilog®黄金参考指南V1.0 1996年8月©版权1996Doulos保留所有权力本刊物的任何部分在得到DOULOS的书面许可前都不能通过包括电子机械影印录像或其他任何形式或任何方式复制保存在搜索系统或发布在英国和北爱尔兰印刷Verilog-XL TM是商标Verilog®是Cadence Design System Inc的注册商标DOULOSChurch Hatch,22 Market Place,Ringwood.Hampshire.BH24 1AWEngland.Tel (+44) (0)1425 471223Fax (+44) (0)1425 471573Email**************.ukURL 序言 (4)指南的使用 (4)索引 (4)用于定义Verilog语法的记号说明 (4)Verilog的简单介绍 (5)背景 (5)语言 (5)编译 (6)模块结构 (6)语句 (7)按字母顺序参考的部分 (9)Always (9)Begin (10)Case (12)编码标准 (13)注释 (14)连续赋值 (15)Defparam (16)Delay (17)设计流程 (18)Disable (18)错误 (19)事件 (20)表达式 (21)For (22)Force (23)Forever (24)Fork (25)函数 (26)函数调用 (27)门 (27)IEEE1364 (30)If (31)Initial (32)实例化 (33)模块 (35)名字 (37)线网 (38)数字 (41)运算符 (43)参数 (44)PATHPULSE$ (46)端口 (47)过程赋值 (48)过程连续赋值 (50)编程语言接口 (51)寄存器 (51)Repeat (53)保留字 (53)Specify (54)Specparam (57)语句 (57)强度 (58)字符串 (60)任务 (61)任务使能 (64)定时控制 (65)用户定义的原语 (67)While (70)编译器伪指令 (71)编译器伪指令 (71)`define (72)`ifdef (74)`timescale (74)系统任务和函数 (76)系统任务和函数 (76)$display和$write (81)$fopen和$fclose (82)$monitor等 (83)$readmemb和$readmemh (84)$strobe (85)$timeformat (86)随机建模 (86)定时检查 (89)值改变转储 (91)命令行选项 (93)命令行选项 (93)序言Verilog黄金参考指南是Verilog硬件描述语言及其语法语义合并以及将它应用到硬件设计的一个简明的快速参考指南Verilog黄金参考指南并不是要代替IEEE的标准Verilog语言参考手册它不像IEEE的标准手册提供了Verilog完整正式的描述相反黄金参考指南以一种方便的参考格式解答了在Verilog的实践应用过程中经常遇到的问题Verilog黄金参考指南也不想成为介绍性的指南这里所提出的信息是一种扼要的参考格式而不是学习像Verilog这种复杂的主题所必要的渐进和共鸣方式但必须承认的是已经熟悉计算机语言的人希望将这个参考指南作为Verilog的课本因此在开始本指南就会对这个主题进行一个简单的非正式介绍Verilog黄金参考指南的主要特征是它包含了从许多Verilog项目中积聚起来的大量实践知识指南不仅提供方便的语法参考很多类似的书也有还对最常见的语言错误提出警告在代码不能编译的时候给出线索指出要看什么地方警告你注意合并问题并对改善你的编码形式提出建议Verilog黄金参考指南是为了给Doulos的系列Verilog训练课程增值也是HDL PaceMaker Doulos Verilog计算机基础训练包的补充指南的使用本指南的主体被分成3个主要部分每个部分都按字母顺序组织每一部分都以每页顶部的关键字词条作为索引通常你只要快速翻阅指南查找相应的关键字词条的就可以找到想要的信息如果找不到也可以用最后的完整索引查找本指南的很多信息都围绕Verilog的句法组织但也有另外一些有关编码标准设计流程错误保留字以及在正文按字母顺序参考部分后面的编译器伪指令系统任务和函数以及命令行选项等特殊的部分如果你是Verilog的新手请先阅读次页的Verilog简单介绍索引粗体的索引条目在指南的主体有对应的页剩下的索引条目按重要性的顺序在字符参考部分的页参考后面用于定义Verilog语法的记号说明在任何可能的时候语法定义要写得和例子相似但有需要引入一些额外的记号简单地来说方括号[ ]包含可选的项目三个点号…表示重复花括号{ }包含的是注释斜体表示语法该部分在别处定义记号的完整描述如下包含注释的花括号{ }所不是被定义的Verilog语法的一部分但它向你提供了有关语法定义的补充信息粗体的花括号{ }是Verilog句法的一部分连接运算符包含在方括号[ ]中的语法是可选的粗体的方括号是[ ]Verilog语法的一部分矢量范围位和部分选择存储器元素…表示前面的项目或行的重复0次或者多次或者表示一个列表例如Item…表示Item重复0次或多次,…表示在用逗号分隔的列表重复例如A,B,C列表中至少有一个项目列表的结尾没有,号小写的字是保留字是Verilog语言的组成部分例如module以大写字母开头的字不是斜体是Verilog的标识符即用户定义的名字它们都不是保留的标识符例如InstanceName斜体的字是句法范畴即在别处完整给出句法名字的定义句法范畴可以在相同的页里定义也可以在独立的页定义还可以在下面定义的其中一个特殊范畴中定义斜体=表示在同一页定义和使用的句法范畴特殊的语法范畴MinTypMaxExpression以Expression定义UnsignedNumber以Number定义SomethingExpression=Expression其中Something给出有关表达式的含意信息例如ConstantExpression ConstantMinTypMaxExpressionVerilog的简单介绍下面向不懂Verilog语言的读者在技术上简要介绍一下Verilog背景Verilog硬件描述语言HDL是描述电子电路行为和结构的一种语言是一种IEEE标准IEEEStd.1364-1995Verilog用于模拟从随机和纯行为到门级和开关级的抽象范围等层次的数字电子电路功能也用于从许多抽象寄存器传输级描述合并即自动产生门级描述Verilog一般用于支持高层次的设计或基于语言的设计其中电子设计在用自动合并工具进行详细设计前要通过高层次的完全抽象仿真来检验Verilog也广泛应用于IC的门级检验包括仿真故障仿真和定时检验Verilog最初是在1984年由Gateway Design Automation公司开发Verilog-XL仿真器的时候一起开发出来1989年Cadence Design Systems公司并购Gateway公司同时拥有对Verilog语言和Verilog-XL 仿真器的权力1990年Cadence将Verilog语言不是Verilog-XL放到公共领域为了使Verilog语言通过IEEE标准化过程一个非赢利性组织Open Verilog International OVI将它不断推进结果在1995年Verilog成为一个IEEE标准此后OVI仍继续不断维护和开发这种语言语言在本部分和指南剩下的部分以大写字母开头的斜体字都是技术术语都可以在本指南的主体中找到硬件设计的层次部分在Verilog中用模块Module描述模块定义了硬件单元的接口即输入和输出及其内部结构或行为大量的原语或者门Gates都内置在Verilog语言内它们表示基本的逻辑门例如and or另外还可以定义用户定义的原语User Defined Primitives UDPs电子电路的结构通过在高层模块内对模块和原语UDPs和门举实例Instances来描述而且实例之间通过线网Nets连接线网表示一个电气连接一条线路或总线端口Port连接列表用于将线网连接到模块的端口或者连接到原语的实例其中一个端口表示一个管脚寄存器Registers见下面也可以连接到实例的输入端口只能连接到输入端口线网和寄存器的值由逻辑值01X未知或未初始化的和Z高阻或悬空组成除了逻辑值外线网还有强度Strength值强度广泛地用于开关级模型以及解释网络有超过一个驱动器的情况电子电路的行为是用Initial和Aways结构以及连续赋值Continuous Assignments描述这些结构以及UDPs和门表示设计的层次树的叶子每个Initial Always连续赋值UDP和门实例相对于所有其他结构是同时执行的Initial或Always内的语句Statements在很多方面上都和软件编程语言的语句相似它们在用定时控制Timing Controls规定的时间例如延迟以及用仿真事件控制触发执行语句在Begin-End块顺序地执行在Fork-Join块并行地执行连续赋值语句修改线网的值Initial和Aways修改寄存器的值Initial或Always可以分解成有给定变量的指定的任务Tasks和函数FunctionsVerilog语言还有大量内置的系统任务System Tasks和函数Functions编程语言接口ProgrammingLanguage Interface PLI是Verilog语言的一个组成部分它提供了一种和调用系统任务和函数相同的方法调用以C写的函数编译Verilog源代码通常输入到计算机的一个或多个文本文件中然后这些文本文件被提交到Verilog编译器或解释器编译用于仿真或合并的数据文件有时候仿真在编译后立即进行不创建中间的数据文件模块结构module M (P1, P2, P3, P4);input P1, P2;output [7:0] P3;inout P4;reg [7:0] R1, M1[1:1024];wire W1, W2, W3, W4;parameter C1 = "This is a string";initialbegin : BlockName// 语句endalwaysbegin// 语句end// 连续赋值...assign W1 = Expression;wire (Strong1, Weak0) [3:0] #(2,3) W2 = Expression;// 模块实例...COMP U1 (W3, W4);COMP U2 (.P1(W3), .P2(W4));task T1;input A1;inout A2;output A3;begin// 语句endendtaskfunction [7:0] F1;input A1;begin// 语句F1 = Expression;endendfunctionendmodule语句#delaywait (Expression)@(A or B or C)@(posedge Clk)Reg = Expression;Reg <= Expression;VectorReg[Bit] = Expression; VectorReg[MSB:LSB] = Expression; Memory[Address] = Expression; assign Reg = Expression deassign Reg;TaskEnable(...);disable TaskOrBlock;-> EventName;if (Condition)...else if (Condition)...else...case (Selection)Choice1 :...Choice2, Choice3 :...default :...endcasefor (I=0; I<MAX; I=I+1)...repeat (8)...while (Condition)...forever...这个快速参考语法摘要不遵从本指南剩余部分所使用的符号惯例Verilog黄金参考指南按字母顺序参考的部分Always包含一条或多条语句过程赋值任务使能if case和循环语句这些语句在仿真运行中重复执行由定时控制管理语法alwaysStatement在何处使用module-<HERE>-endmodule规则• always只能赋值寄存器reg integer real time realtime类型• 启动仿真时所有always都开始执行而且在仿真过程中持续执行当到达always的最后一条语句时程序返回到always的第一条语句继续执行注意• 如果Always包含超过一条语句语句要包含在begin-end或fork-join块中• 没有定时控制的always将永远循环合并always是其中一条很有用的Verilog合并语句但always通常是不合并的为了使结果最好代码应受到下面其中一种模板的限制always @(Inputs) // 所有输入begin... // 组合逻辑endalways @(Inputs) // 所有输入if (Enable)begin... // 锁存器的动作endalways @(posedge Clock) // 只是时钟begin... // 同步的动作endalways @(posedge Clock or negedge Reset)// 只是时钟和复位beginif (!Reset) // 测试异步复位的有效激活电平... // 异步行动else... // 同步行动end // 给出触发器+逻辑举例下面的例子是一个寄存器传送级alwaysalways @(posedge Clock or negedge Reset)beginif (!Reset) // 异步复位Count <= 0;elseif (!Load) // 同步载入Count <= Data;elseCount <= Count + 1;end接下来的例子是描述组合逻辑的alwaysalways @(A or B or C or D)beginR = {A, B, C, D}F = 0;begin : Loopinteger I;for (I = 0; I < 4; I = I + 1)if (R[I])beginF = I;disable Loop;endend // 循环endBegin用于组合语句使它们按顺序执行Verilog的语法通常要求例如在always中只有一条语句如果需要超过一条语句语句就要被包含在一个begin-end块内语法begin [: Label[ Declarations...]]Statements...endDeclaration = {either} Register Parameter Event在何处使用见语句规则• begin-end块必须包含至少一条语句• Begin-end块内的语句按顺序执行定时控制与前一语句有关执行完begin-end块的最后一条语句后整个begin-end块的执行也完成• Begin-end和fork-join块可在自己内部或相互之间嵌套• 如果begin-end块要包含局部声明必须先命名这个begin-end块即必须有标记• 如果要禁能一个begin-end块必须先命名这个块注意仿真中Verilog LRM允许begin-end块被交叉执行这就是说即使begin-end块包含的两个相邻语句之间没有定时控制仿真器也可以选择执行另一个过程的部分例如另一个always的语句这就是Verilog语言有不确定性的原因提示• 在没有局部声明和块不会被禁能的情况下也可以给begin-end块加上标记增加其可读性• 不会在别处使用的寄存器可以用局部声明来声明这使声明更明确举例initialbegin : GenerateInputsinteger I;for (I = 0; I < 8; I = I + 1)#Period {A, B, C} = I;endinitialbeginLoad = 0; // 时刻0Enable = 0;Reset = 0;#10 Reset =1; // 时刻10#25 Enable =1; // 时刻35#100 Load = 1; // 时刻135endCase一个语句基于case表达式的值条件地执行最多一个分支语法CaseKeyword ( Expression)Expression,... : Statement {表达式可以是变量}Expression,... : Statement... {任意数量的情况}[default [:] Statement] {不一定在结尾}endcaseCaseKeyword = {either} case casex casez在何处使用见语句规则• casex语句的X和Z以及casez语句的Z表示无关• 最多可以有一条default语句当没有标记表达式符合case表达式时执行default语句标记是在冒号左面的一个表达式或是用逗号分隔的表达式列表也可以是保留字default default后面可以有或者没有冒号• 如果标记是用逗号分隔的两个或多个表达式列表只要case表达式符合其中一个标记表达式就认为标记就符合case表达式• 如果没有标记表达式符合case表达式而且没有default语句case语句不起作用注意• 如果特殊的标记要执行超过一条语句语句必须包含在begin-end或fork-join块内• 如果相应的标记是第一个符合case表达式的标记case只会执行这个分支Case的标记不需要互斥因此当相同的标记被错误地重复使用时Verilog编译器不会报告出错• Casex和casez语句的要用保留字endcase而不是endcasex或endcasez结束• Casex表达式中的X或Z或者casez表达式的Z符合所有case的标记这会使仿真结果混淆合并• case语句内的赋值一般合并到多路复用器如果case标记使用变量例如寄存器或线网那么可以合成优先权译码器• 无时钟的always中的不完全赋值即没有指定某些输入条件的输出被合并到透明锁存器有时钟always中的不完全赋值合并到循环寄存器提示• 仿真时通常用default作为最后一条case语句以捕捉非法的情况• casez通常比casex好因为在仿真中出现X会导致产生误导或混乱的结果• casex和casez标记的Z可用字符?代替这可以清楚地表示值无关而不是高阻举例case (Address)0 : A <= 1; // 选择一个单独的地址值1 : begin // 执行超过一条语句A <= 1;B <= 1;end2, 3, 4 : C <= 1; // 选出几个地址值default : // 其他剩余的地址$display("Illegal Address value %h in %m at %t",Address, $realtime);endcasecasex (Instruction)8'b000xxxxx : Valid <= 1;8'b1xxxxxxx : Neg <= 1;defaultbeginValid <= 0;Neg <= 0;endendcasecasez ({A, B, C, D, E[3:0]})8'b1 : Op <= 2'b00;8'b010 : Op <= 2'b01;8'b00100 : Op <= 2'b10;default : Op <= 2'bxx;endcase编码标准编码标准共有两类词汇编码标准负责控制文本格式命名惯例和注释这种标准增加程序的可读性并简化维护合并编码标准控制Verilog的结构样式避免普通的合并缺陷并在设计流程的早期发现合并错误下面列出的编码标准需要根据所选的工具和个人喜好修改词汇编码标准• 将每个Verilog源文件的内容限制到一个模块不从文件分割模块• 源文件的名字应与文件内容有关例如ModuleName.v• 每行只写一条声明或语句• 使用和例子一样的缩进• 用户定义的名字要注意大小写一致例如第一个字符是大写• 尽管局部名字例如循环变量可能很简洁但用户定义的名字应当是有意义并包含信息的• 写注释来解释不是复制Verilog代码其中注释接口特别重要例如模块参数端口任务和函数变量• 在任何可能的时候用参数或`定义宏避免在声明和语句中直接嵌入文本数字和字符串合并编码标准• 将设计分割成小的功能块并为每个块使用一个行为样式除了设计的主要部分外其他部分要避免门级描述• 有定义好的时钟策略而且在Verilog明确执行该策略例如单时钟多相时钟门时钟多时钟域确保Verilog的时钟和复位信号是清楚的即不从组合逻辑或无意识的门产生• 有定义好制造好的测试策略并适当地编码Verilog例如所有触发器可复位从外部管脚进行测试无功能冗余• 所有Verilog的always应遵守标准合并处理模板的其中一个见Always• 描述组合和锁存逻辑的always必须在always顶部的事件控制列表列出所有输入• 组合的always必须不能包含不完全赋值即所有输入值的组合必须赋值给所有输出• 描述组合和锁存逻辑的always必须不能包含反馈即always中被赋值为输出的寄存器不能作为always的输入• 带时钟的always在事件控制列表中只能有时钟和异步控制输入一般是复位或置位• 避免不必要的锁存器这些多余的锁存器是由于无时钟always的不完全赋值产生• 避免不必要的触发器当用非阻塞赋值在带时钟的always内给寄存器赋值或者当寄存器在连续重复的带时钟always之间和时钟周期之间保持值不变时触发器被合并• 所有内部状态寄存器必须可复位这样寄存器传输极和门级描述在检验的时候可以复位到相同的已知状态这不能应用到流水线寄存器或同步寄存器• 对于有不能到达的状态的有限状态机器和其他时序电路例如一个4位的十进制计数器有6个不可到达的状态如果硬件在这些状态下可以被控制那么所有2N个可能的状态的行为必须在Verilog中明确描述包括不能到达的状态的行为这就允许保留状态机器进行合并• 避免在赋值中使用延时除非要求在寄存器传输级解决0延时时钟的时滞问题• 不要使用integer或time类型的寄存器否则它们会分别合并到32位总线和64位总线• 请仔细检查使用动态索引的Verilog代码即用可变的索引或地址作为位选择或存储器元素循环语句或算术运算符因为这些代码要被合并成大量难以优化的门注释可以应当在Verilog源代码中包含说明性的注释语法{单行注释}//{多行注释}/* ... */在何处使用几乎可以在任何地方使用但不能分割运算符数字字符串名字和关键字规则• 单行注释用两个斜杠字符开始在行的末端结束• 多行注释用/*开始注释可能跨过多行直到*/处结束• 多行注释不能嵌套但多行注释中可以有单行注释它们没有特别的含意注意/* ... /* ... */ ... */注释在第一个*/处结束第二个*/将被忽略这个例子无疑会出现句法错误提示全部使用单行注释只在例如在开发和调试代码的过程中需要注释大段代码时使用多行注释举例// 这是一个注释/*共有三行的多行注释*/module ALU /* 8位ALU */ (A, B, Opcode, F);连续赋值当表达式中的线网或寄存器的值改变时连续赋值在一个或多个线网创建事件语法{either}{见线网}NetLValue = {either}NetNameNetName[ConstantExpression ]NetName[ConstantExpression: ConstantExpression ]{NetLValue,...}在何处使用module-<HERE>-endmodule规则两种形式的连续赋值效果相同Assign左边的线网必须在连续赋值语句的前面的源代码中明确声明注意尽管连续赋值和过程连续赋值很相似但它们是不一样的请确保将assign放在正确的地方连续赋值在initial或always外过程连续赋值在允许使用语句的地方都可以使用initial always任务函数等的内部合并• 合并工具忽略延时和强度使用指定定时限制的工具代替• 连续赋值作为组合逻辑合并提示• 用连续赋值描述组合逻辑可以容易地用一个简单表达式描述函数可以用于组成表达式always 一般能较好地描述许多复杂的组合逻辑而且其仿真速度比用大量独立的连续赋值语句快得多• 当Verilog要求使用线网时连续赋值对传输寄存器的值到线网非常有用例如将在initial中描述的测试激励应用到模块实例的输入输出口举例wire cout, cin;wire [31:0] sum, a, b;assign {cout, sum} = a + b + cin;wire enable;reg [7:0] data;wire [7:0] #(3,4) f = enable ? data : 8'bz;Defparam编译时覆盖参数值通过使用层次名字参数值可以在设计层次内部或外部的任何地方被覆盖语法defparam ParameterName =ConstantExpression,ParameterName = ConstantExpression,... ;在何处使用module-<HERE>-endmodule合并一般不合并提示不要使用defparam它提供了一种有用的方法逆向注释布局延时但现在通常通过使用特殊的程序块和编程语言接口实现对要覆盖的参数请在模块实例化时使用#语法举例`timescale 1ns / 1psmodule LayoutDelays;defparam Design.U1.T_f = 2.7;defparam Design.U2.T_f = 3.1;...endmodulemodule Design (...);...and_gate U1 (f, a, b);and_gate U2 (f, a, b);...endmodulemodule and_gate (f, a, b);output f;input a, b;parameter T_f = 2;and #(T_f) (f,a,b);endmoduleDelay延时可以在UDP和门的实例连续赋值和线网中使用这些延时能为线网元件和连接的传播延时建模语法{either}# DelayValue#( DelayValue[, DelayValue[, DelayValue]]) {上升下降关断}DelayValue = {either}UnsignedNumberParameterNameConstantMinTypMaxExpression在何处使用见连续赋值实例化线网规则• 如果只给出一个延时的值这个值既表示上升和下降传播延时即分别从0或1跳变又表示关断延时如果可用• 如果给出两个延时的值第一个值是上升延时第二个值是下降延时但tranif0tranif1rtranif0和rtranif1除外它们的第一个值表示开启延时第二个值是关断延时• 如果给出三个延时的值第三个延时是关断延时转换到Z但trireg线网除外它的第三个延时是电荷衰减时间• X的延时是最小的指定延时• 对于矢量来说从非0到0的转换被认为是下降转换到Z是关断所有其他转换都被认为是上升注意很多工具强调延时的MintypMax表达式必须包含在括号中例如#(1:2:3)是允许的但#1:2:3是不允许的合并合并工具忽略延时合并线网列表的延时受到合并工具命令例如设置最大的时钟周期约束提示指定的块延时路径延时通常是建模延时的一种很精确的方式而且它还提供了计算延时的机制以及逆向注释布局信息设计流程使用Verilog和合并设计ASIC或复杂FPGA的基本流程如下设计流程需要进行迭代但这里不作介对于每个块写寄存器传输级Verilog边界条件分析门计数和定时对于完整的芯片Verilog或装配接线柱布局仿真故障仿真和定时分析Disable使激活的任务或有名字的块在执行完所有语句前终止其执行语法disable BlockOrTaskName;在何处使用见语句规则• 禁能一个有名字的模块begin-end或fork-join或者一个任务就禁能从该模块或任务使能的所有任务而且向下禁能到使能的任务层次然后继续执行被禁能的任务后面使能的语句或有名字的块• 有名字的模块或任务可以在自己内部用disable语句自我禁能• 当任务被禁能时下面的事件不能确定任何输出或输入输出的值仍未生效的非阻塞赋值预定的事件assign和force语句• 函数不能被禁能注意任务自我禁能与任务返回不一样因为任务自我禁能的输出没有定义合并disable只在有名字的模块或任务自我禁能时合并提示用disable可以从任务早期退出退出循环或继续下一个迭代的循环举例begin : Breakforeverbegin : Continue...disable Continue; // 继续下一个迭代...disable Break; // 退出forever循环...end // 继续end // 终止错误下面列出的是最常见的Verilog错误前五位占了所有错误的50%前5位Verilog错误• 过程赋值的左边不声明为寄存器类型• 缺少begin-end语句或begin-end语句不匹配• 二进制数缺少基’b也就是说编译器将它们看作是十进制数• 在编译器伪指令中错误使用撇号应当是后撇号或重音符号`和数字基应当是一般的单引号或倒转的逗号’• 语句的结尾缺少分号其他常见错误• 尝试在任务或函数名字后面的方括号中定义任务和函数参数• 在测试程序中测试时忘了要将模块实例化• 用过程连续赋值代替连续赋值即assign在错误的地方使用• 尝试用保留字作为标识符例如xor• Always内没有定时控制导致无限循环• 在事件控制例如@(a or b)中用逻辑或运算符||代替保留字or• 用隐式线网连接矢量端口• 模块实例中端口连接的顺序错误• 嵌套的if-else语句中有包含错误begin-end的位置不正确• 等号的形式错误=用于赋值==用于比较数字值===用于匹配01X和Z的精确序列事件事件用于在行为模型中描述通讯和同步语法event Name ,...; {声明事件}-> EventName; {触发事件}在何处使用见->的语句在以下的地方允许有事件声明module-<HERE>-endmodulebegin : Label-<HERE>-endfork : Label-<HERE>-jointask-<HERE>-endtaskfunction-<HERE>-endfunction规则事件没有值或延时它们被事件触发语句触发在跳变沿敏感的定时控制中测试合并一般不合并提示有名字的事件通常用于在测试程序和系统级模型中与相同模块或不同模块使用层次名字的always 之间通讯举例event StartClock, StopClock;alwaysforkbegin : ClockGeneratorClock = 0;@StartClockforever#HalfPeriod Clock = !Clock;end@StopClock disable ClockGenerator;joininitialbegin : stimulus...-> StartClock;...-> StopClock;...-> StartClock;...-> StopClock;end表达式表达式从一组运算符名字文本值和子表达式计算值常数表达式是在编译时可以计算值的表达式标量表达式只计算1位的值延时可以用MinTypMax表达式表示语法Expression = {either}PrimaryOperator Primary{一元运算符}Expression Operator Expression{二元运算符}Expression ? Expression : ExpressionStringPrimary = {either}NumberName {参数线网或寄存器的名字}Name[ Expression]{位选择}Name[Expression: Expression]{部分选择}MemoryName[Expression]{Expression,...}{串联}{Expression{ Expression,...}}{复制}FunctionCall( MinTypMaxExpression){延时使用MinTypMax表达式}MinTypMaxExpression = {either}ExpressionExpression: Expression: Expression规则• 只有矢量的线网和reg以及integer和time允许位和部分选择• 部分选择必须在分号的左边寻址一个比分号右边更高的位最高位是线网或寄存器声明中左边的范围表达式的值• 有X或Z或超出范围的位和部分选择可能会也可能不会被捕捉为编译器错误它们给出的表达式结果是X• 存储器没有位或部分选择机制• 当表达式用整数常数作为操作数无基但带符号的整数例如-5的处理和有基且带符号的整数例如-‘d5不一样前者作为带符号数处理后者作为无符号数处理注意很多工具要求常数MinTypMax表达式的最小典型和最大延时值有序例如min<=typ<=max举例A + B!A(A && B) || CA[7:0]B[1]-4'd12/3 // 一个很大的正数"Hello" != "Goodbye" // 表达式为真1$realtobits(r); // 系统函数调用{A, B, C[1:6]} // 并置8位1:2:3 // MinTypMaxFor通用循环语句允许一条或多条语句重复执行语法for ( RegAssignment; {初始值}Expression; {循环条件}RegAssignment) {循环值}Statement。
周立功的学习经历
我的学习经历!以下帖子不针对matadorfor网友。
首先声明,zlgARM是上班时间就挂在网上,并非眼睛时刻叮嘱网页,请不要钻牛角尖!我们每天要不停地接电话,那是6条技术支持的专线。
您的心情我非常能够理解,这不是一句客气话。
我想如果您不坚持学好,难道学其他的东西又能够学好吗?肯定不能。
不学好是您的损失,最大损失是不能赢得挑战。
不知道我说得是否正确?当然,您骂我也无妨。
很多问题需要自己下功夫学习,我也同样如此。
很多东西可以找一找以前的帖子,同时也要看看相关的书。
学习ARM我也是将相关的图书看了几十遍,不断地查找相关的技术资料“苦”学出来的。
我不知道大家是怎么学习新技术的,有没有将程序一行一行地自己重新敲进去,并将书上的标注也并写上,与此同时保证这行程序的意思“已经全部”搞懂了。
如果没有搞懂,则应该等搞懂了才进行下一步,而不是将程序“Load”进去“RUN”一次就算搞懂了,那是自欺欺人的做法。
除了配套资料上提供的程序之外,每个人自己是否还写了很多“自己的程序”,这是必须要做的事情,而且还要写笔记,随后的笔记越来越多,直到最后成为了“自己的专著”,我想这才算真的学会了,这就是我的学习经历,估计没有更好的办法。
有很多问题可以说不完全属于技术支持本身的范畴,不能说凡是用户不会的知识,我们都要立即回答,我们是否需要支持所有的问题?值得商榷,其实,有很多问题使用电话直接提问可以立即解决,因为有很多问题提的也不准确,有很多问题则需要长篇大论才能回复,不是一件容易的事情。
下面是我的学习笔记(还不完整,准备再改一次),可以供您参考,应该怎样学习?我学习也是要写笔记和总结的,不知道您是否如此,要知道我已经42岁,我有什么优势,没有!就是刻苦。
同时请结合我们的课件学习,课件是我们耗费六个月时间创造出来的,对初学者非常有帮助。
周立功博文集锦
成功心法(7):如果提高自身的技术修养(1)凡是学过C语言的人都知道main()函数,但未必一定清楚其鲜为人知的“私隐”,下面将为此揭开其神秘的面纱。
????对于标准的C语言来说,main 是所有 C 程序中都必须包含的一个函数名字。
main()是C 程序中第一个要执行的函数,必须通过main()中的函数调用才能执行其它函数。
只有当main()执行结束时,整个程序才会执行结束。
尽管在逻辑上main()是程序中第一个要执行的函数,但在程序行文上,它不一定是第一个函数。
???????main()函数是由程序员自行编写的,但其函数说明符是由语言规定好的。
它可以定义成无参函数,详见程序清单1。
程序清单??无参数函数int main(void){????????......}????也可以带有2个特定参数 argc与argy,详见程序清单2。
程序清单2 int main(int argc,char argy[])函数int main(int argc,char argy[]){?????......}????argc与argy 特定参数名字是由语言预定义的标识符,尽管有些C编译器也允许使用其它的一些参数,但标准C只支持argc与argy。
在C语言中,编译器处理main()函数与其它函数的方式基本上是一样的,其区别主要表现在运行时,编译器可以支持argc与argy这2个特殊的参数。
????由于计算机仅认识机器码,而不认识C语言中的main()函数,因此必须有一段程序来识别C编译器编译的main()函数并调用它。
其实在C语言的标准中,有一个非常重要的概念,那就是环境。
????环境是指程序翻译与执行所在的计算背景(或称计算上下文),环境可以分为翻译环境与执行环境2类。
对于C程序员来说,一般不必关心翻译环境。
而在C语言的标准中,对执行环境的解释大致如下:????执行环境是指程序经过翻译后执行的环境,执行环境与翻译环境可以是同一环境,也可以是不同环境。
周立功博文
1981年我参加高考失败之后上了技校,但我还是不甘心将来当一辈子工人。
幸好当时正值改革开放的好时机,举国上下莫不崇尚知识,百废待兴各行各业大量需要人才,自学成才的典范层出不穷,于是我决定自学成才,制定了一个自学十年成为专业人才的学习计划。
我首先从高等数学开始入手,购买一套完整的高等数学自学丛书,分别为《一元函数微分学》、《一元函数积分学》、《多元函数微积分》、《微分几何》、《线性代数》......同步学习李翰逊教授主编的《电路分析基础》、童师白教授主编的《模拟电子技术》与阎石教授主编的《数字电子技术基础》,还订阅了《无线电》与《电子技术应用》杂志。
自学是一个艰苦的过程,我生活在一个小地方,找到一个能够帮助你解决难题的老师非常不容易,但有一个好处就是锻炼了我独立解决问题的能力。
在毫无约束的情况下的自学是非常艰难的,尽管每走一步我都将图书带在身边,但并不见得能够坚持随时随地抓紧学习,每周自我反省的时候,总是自我批评懊悔不已,但效果并不见得有明显的好转,因为目标并不明确,唯一的愿望是希望能够转干,将来有一天调到技术科或设备科做一个技术员,而在当时做一个技术员与当一名优秀的技工待遇差别不大,仅仅是社会地位稍微高一些,而在参加工作的第二年18岁的年纪时,我已经是一个国家二级企业的团委书记了,从而导致很难产生强烈的求知欲和持久的兴趣。
那么怎样才能产生强劲的动力呢?我首先想到的是励志,正好有一个机会旁听中国农村人才学研讨会,于是决定从人才学入手研究成才的方法,探索卓越人才在童年和青年时代到底有哪些优秀的品质和特征,他们之能够所以走向成功,到底有何秘诀?当时唯一能够买到的只有《诺贝尔奖获得者传记》,通过横向比较研究发现,他们共同的特点都是很勤奋并且坚持终生学习。
其次我给自己划定范围坚持广泛阅读优秀的文学作品、人物传记、美学、哲学、心理学、历史和管理学等方面的图书,至少保持每天的阅读量为2小时并且坚持到现在从未间断,让自己的思想与时俱进不断得到升华。
ARM嵌入式系统基础教程习题答案 周立功
ARM嵌入式系统基础教程习题答案周立功arm嵌入式系统基础教程习题答案--周立功第一章思考与练习1、列举3个书本中未提到的嵌入式系统的例子。
请问:红绿灯掌控,数字空调,机顶盒2、什么叫做嵌入式系统嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?嵌入式处理器就是为顺利完成特定的应用领域而设计的特定目的的处理器。
嵌入式微处理器(embeddedmicroprocessorunit,empu)嵌入式微控制器(microcontrollerunit,mcu)嵌入式dsp处理器(embeddeddigitalsignalprocessor,edsp)嵌入式片上系统(systemonchip)4、什么就是嵌入式操作系统?为何必须采用嵌入式操作系统?是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。
其次,提高了开发效率,缩短了开发周期。
再次,嵌入式实时操作系统充分发挥了32位cpu的多任务潜力。
第二章1、嵌入式系统项目研发的生命周期分后哪几个阶段?各自的具体任务就是什么?项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4个阶段。
识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
明确提出解决方案阶段由各厂商向客户递交标书、了解解决方案。
执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,分析项目偏差,采取必要措施以实现目标。
完结项目阶段主要包含转交工作成果,协助客户同时实现商务目标;系统更替给保护人员;还清各种款项。
2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?在一个项目中,存有许多的因素可以影响至项目展开,因此在项目展开的初期,在客户和研发团队都还未资金投入大量资源之前,风险的评估可以用以预估项目展开可能会遭遇的难题。
大四学生个人事迹材料
三一文库()/总结报告/先进事迹大四学生个人事迹材料写这篇文章的时候,我正处于大四毕业设计的准备阶段,在即将结束我的大学生活之际,我将我的大学几年的有意义的生活与大家分享,看过这篇文章后也许能让那些有相同性格和兴趣的同学为了实现自己的人生目标少走些弯路,大家要相信,大学校园——将为你提供一生最好的学习环境。
先做一下自我介绍:孔飞虎,男,热能与动力工程学院热动专业(制冷方向)XX届毕业生。
自XX年进入山东建筑大学以来便严格要求自己,根据自己的性格(耐得住寂寞、喜欢思考钻研)和兴趣爱好(对事物求其原理),在提高自己思想道德素质的同时,重点强化自己学术科技方面的能力,以适应21世纪时代要求的专业型人才。
大一刚进入大学校园,我并没有放松对自己的要求,努力学习,但是当时并没有专业课,课本上的知识没有什么需要我深入探讨的内容(只是对高中课本知识的重复,只学习课本上的知识过于枯燥无味,再加上没有了高中时期的压力和约束,许多同学失去了学习的兴趣),因此在大一下半学期我就报了c语言培训班,晚上很多时间都用在对c语言的学习上,通过半年的学习,取得了“全国计算机等级考试二级合格证书”(之所以把这个证书的名字写的很正式,是因为我怀念当时学习c语言时那种犹如高中时的学习气氛,也因为它对我后来单片机的学习帮助很大),虽然大二的时候开了c语言课程,但是我的c语言基础的确是在这个时候打下来的。
我的大二生活基本上是按部就班的,期间还好好玩了一段时间的网络游戏—完美国际,至今回忆起来很是感叹当时没有抓住时间多学习点东西,如果当时我看了《我的大学六年—郭天祥》和《周立功写给学单片机的年轻人(其他专业也同样道理)!》这两篇文章,肯定会好好利用这一年的时间来学习的(如果有心大家可以看一下这两个文章,可以百度搜索,同时在我的校内网日志里也有这两篇文章,我很喜欢周立功最后的一句话——您距离失败永远只有6个月!)。
但是,我的cad绘图能力是在这个时期自学出来的,cad绘图基础的强化也对我以后的学习带来了很大的帮助。
周立功论人才与企业及其它(1)
周立功论人才与企业及其它 (1)我的理想不是梦在这一生里我最刻骨铭心地二件事就是Apple公司的成功创业和中国青年上刊登潘晓写的的一篇文章人生的路为什么越走越窄引发了我对人生的思考1981年我参加高考失败了我的父母都是农村中学教师2人的工资加起来还不到70元父亲身体不好长年生病最小的妹妹又患先天性心脏病同时2个妹妹又在读初中尽管我的数学成绩从初中到高中一直在学校从来就是第一名我的体育成绩也十分地好特别是100米短跑达到了11.5秒我总是一门心思要去考体校由于我从小就十分地顽皮老师和同学都叫我天马可谓劣迹斑斑面对家里这么差的生活条件加之我在父亲和众人的眼里根本不可能成为一个回头浪子于是我几乎没有机会去重新复读来年再参加高考了后来我的很多同学通过复读考上了大学一个一个地都远离我而去很多年都不与我往来参加工作之后我在单位里当了团委书记评上了湖南省新长征突击手和劳动模范凭本事考上了工程师1990年10月我在一家香港公司上班第一个月就拿到了1500元这一切的一切事实都没有人敢相信我为自己年轻时代的轻浮付出了几乎惨重的代价我深深地体会到树立诚信对于一个年轻人来说是多么的可贵我通过阅读一些杂志了解到Apple电脑创业的故事深深地为2个年轻人的创新和成功所感动从此他们永远成为了我心中的偶像由于我从小学就开始接触收音机加之平时阅读中学科技杂志也了解到很多电子控制方面的知识我的内心世界里一直对电子自控充满兴趣久而久之成为一个优秀的自动化工程师也就由梦想变成了理想有了在国营企业港资企业的工作体会我在已经满了30岁之后的1994年11月10日也就是从劳模班毕业3个月的时间就开始”下海”创业在广州五山科技街1栋2楼68号租下一个柜台销售单片机开发工具和AT89C51单片机我深深地感到一个人的力量是多么地渺小和有限人在最后的时刻图什么中国历史上那么多的英雄人物不都是在为中华民族争一口气吗我决心要做一个对社会有贡献以其对整个行业的发展起着重要推动作用的人只有依靠团队的力量才有可能达到目的那么办企业在我来看是唯一的最好的表达方式人才与文凭BBS上的人才招聘广告已经几乎很少有人敢大胆地写上要求本科以上学历甚至更不能说要求研究生毕业了否则肯定会招徕一系列的讽刺谩骂记得有一次我在C51BBS上发了一个人才招聘的帖子有人说我小学还没有毕业做过TCP/IP ……要不要面对这样的帖子我真的不知说什么才好我是28岁才到中国纺织大学自动化及计算机系去读书的在何立民教授的指点下也经历了近20年的奋斗我之所以能够有机会走到今天绝对不是普遍规律而是一个特殊现象因此我不鼓励大家自学成才而恰恰是希望有条件的人应该好好珍惜机会刻苦读书为了有机会上大学读书我整整想了10年时间我无时不刻都在为自己年轻时轻浮缺乏远大的理想不好好学习而悔恨终生回头来看可以说高学历群中高素质的人才比例绝对的数量要多一些作为一个企业在人才比例的搭配上应该是招聘一定数量的研究生和适当数量的大中专本科生如果一个企业完全依靠自己培养人才那么这个企业势必会被不恰当的人才战略拖垮薪酬问题很多人在看了我们的招聘广告时经常会问公司的待遇如何事实上我们公司的天条之一就是不能讲薪酬的具体数字但是我可以负责任地告诉大家一在中国的企业和部分的外国企业中我们的薪酬是很有竞争力的二创业初期加盟公司的大学生他们都几乎成为了公司的高层负责人而且已经得到了比较合理的原始股份当然股份的取得有一定的机遇和历史原因但主要是他们的贡献和功劳不可抹煞尽管后来公司的员工可能得到股份的机会比较少但公司会在工资奖金和福利方面倾斜考虑无论怎样从根本上也说明了公司重视人才的决心三公司规定的待遇除了工资还有年终奖金春节15天的有薪假期表现突出的还有机会得到购买住房的补贴等福利四对于有卓越贡献的员工公司可以破格奖励其中公司就奖励了董事副总经理岳宪臣一辆帕桑特轿车他现在所有投资的公司中都持有10%的股份我认为股份分红是通过投资表现出来的一种形式工资奖金和特别的奖励是对他工作成绩的有一种肯定方式五公司不仅提供了良好的科研环境条件还塑造了良好的企业文化同时团队的合作精神和能力特别地强更重要的是我们的管理团队能够做到礼贤下士知人善任视人才为生命六公司能够给开发人员提供继续教育的机会最近开始公司安排一位员工专门去进修英文2002年4月1922日邀请了清华大学工程物理系邵贝贝教授专门到公司来向大家传授UC/OSII 源码公开的操作系统下半年我们还将邀请北京航空航天大学706教研室夏继强教授讲授数据通信和CAN-bus 局域控制网与此同时还将邀请相关的老师来公司讲解Keil C51原理及其程序设计目的在于帮助开发人员深入系统地掌握Keil C51及RTOS道路有很多条如果要问哪条路最好我高兴地告诉大家加盟周立功团队最好感情和理智在感情与理智的矛盾冲突之间企业迫于盈利的压力只能近乎残酷地选择理智从个人情感上来说有时我并不想炒掉某某员工因为他确实没有什么过错而且通过一段时间的工作他本身的技术水平也提高得很快但由于企业的发展速度越来越快以至于他无法跟上企业发展的需要此时此刻企业标准和朋友标准是冲突的我是在做企业而不是在交朋友所以我必须做到不近人情地对事不对人在公司内部也时常有员工问我好像在公司里工作没有安全感事实上我每时每刻都在危机中度过我几乎没有一天不是早上800起床晚上1200以后睡觉包括昨天五一节放假我与研究所负责人戚军都在看P89LPC932 Flash 单片机非公开版的英文资料一边看一边讨论如何给美国PHILIPS 半导体公司提出改进意见面对国际市场瞬息万变的发展形势我无暇顾及个人的利益和恩怨人人必须抓紧时间努力学习有准备地应对复杂而又变化多端的局面――时刻准备变换角色人人都有被炒鱿鱼的可能不是您炒掉我便是我炒掉您或是我被市场所淘汰无情的现实和血的教训府拾皆是我们生活在这个时代的每一个人必须珍惜来之不易的机会时刻打起十二分的精神努力学习和工作无愧于自己无愧于养育我们的父母和关心我们的家人浅论商业化和商人前一段时间在网站上有很多的人动不动就指责某某是商人似乎只要沾上商业化就好像干了见不得人的事一样几乎人人可以口诛笔伐2000年初期几个开始有了一点点小名气的个人网站纷纷标榜自己办网站是如何如何地不以盈利为目的痛斥象我这样继续以技术为手段出来办公司的人可以毫不夸张地说是犹抱琵琶又遮面今天回头来看没有商业化能行吗毫无疑问他们都是英雄出少年从互联网的发展线索来看也说明他们又并非真正的英雄至少他们不敢真正地坦然地面对自己的真实想法和人生之路事实上如果不依赖商业化的行为那么个人的理想和愿望将肯定无从谈起即便您是一个十分卓越的人才如果您不是伯乐而又没有找到没有伯乐或者没有被伯乐发掘您可能永远不能成为千里马毫无疑问此时此刻商人的重要作用就显现出来了我们每个人都要明白一个道理成功的商人――他同样也是出类拔萃的优秀人才 在今天的中国不是商人太多而恰恰是需要更多的能够振兴民族产业的优秀商人――企业家我呼唤更多的人才能够脱颖而出为中华之崛起而奋斗2002年5月1日于帝景苑寓所。
周立功写给学单片机的年轻人
周立功写给学单片机的年轻人作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。
你们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。
当然,如果你现在看了我写的这篇文章可能还不算晚,因为你还有机会在以后的岁月里奋起直追——“亡羊补牢,尤未为晚”。
对于现在刚进入大学的学生,你应该更加珍惜这美好的求学机会,因为眨眼之间几年就过去了,你很快就会感到来自全社会生存竞争的压力,你面临的对手再也不仅仅是你身边的同学,今天你在班上的成绩的确是前几名,但一走到社会上去才感到是多么地脆弱而又多么地不堪一击。
在面试大多数本科生时,我仅仅是询问了一些有关MCS-51 系列单片机的基本原理,但却几乎很少有人能够完全答对,简直是五花八门。
很多作为一个即将毕业的自动化专业本科生,至今还不知道单片机是这个专业的核心基础,难道不可悲吗?你的水平不高我完全心中有底,其实我只要求这些学生能够掌握单片机应用开发的基本技能,用汇编和C51 写过一些基本的程序,真正动手做过一些简单的项目,然后将自己做过的项目写成比较规范的文档。
我想,这种形式的“自我介绍”肯定要比让别人看你那写的千遍一律的“八股文”简历不知要强多少倍,古人言:“一叶知秋”其实讲的就是这个道理。
平心而论只有具备这样基础的学生才配得上企业花钱对你进行二次“开发”事实上,很多学生根本就不管老师平时是多么地劝导都听不进去,我认为你只要平时善于做一个有心人,主动一些多找老师请教,然后从大三开始帮老师打打下手干一些活。
还有一个途径就是自己花钱购买一些学习开发实验板,加强动手能力的训练。
但也有很多学生说没有钱,可事实上并非如此,现在的学生购买手机成风,我不知道手机对你们现在来说到底有多大的用途?事实上,现在的学生家庭条件普遍都不太好,可这些孩子们的攀比心里却十分地严重和可怕。
到今天即将毕业之际才感到找工作太难。
周立功单片机LPC课件
第1章 目录
1. 嵌入式系统 2. 嵌入式处理器 3. 嵌入式操作系统
周立功单片机
• 嵌入式处理器 ——概述
早期的嵌入式系统通常使用普通个人计算机(PC) 中的通用处理器。近年来,随着大量先进的微处理器 制造技术的发展,越来越多的嵌入式系统用嵌入式处 理器建造,而不是用通用目的的处理器。 这些嵌入式 处理器可以大致分为以下几类:
周立功单片机
1.3 嵌入式操作系统
• 基本概念 ——前后台系统
对基于芯片的开发来说,应用程序一般是一个无 限的循环,可称为前后台系统或超循环系统。
很多基于微处理器的产品采用前后台系统设计, 例如微波炉、电话机、玩具等。在另外一些基于微处 理器应用中,从省电的角度出发,平时微处理器处在 停机状态,所有事都靠中断服务来完成。
周立功单片机
• 现实中的嵌入式系统
周立功单片机
• 嵌入式系统的概念
目前,对嵌入式系统的定义多种多样,但没有一 种定义是全面的。下面给出两种比较合理定义:
●从技术的角度定义:以应用为中心、以计算机技 术为基础、软件硬件可裁剪、适应应用系统对功能、 可靠性、成本、体积、功耗严格要求的专用计算机 系统。 ●从系统的角度定义:嵌入式系统是设计完成复杂 功能的硬件和软件,并使其紧密耦合在一起的计算 机系统。术语嵌入式反映了这些系统通常是更大系 统中的一个完整的部分,称为嵌入的系统。嵌入的 系统中可以共存多个嵌入式系统。
周立功单片机
1.3 嵌入式操作系统
• 概述
适用于计算中心等较大
多道批处理操作系统 监操
的计算机系统
控作 程系
分时操作系统
适用于多个用户共享系 统资源
Hale Waihona Puke 序统实时操作系统适用于嵌入式设备和有 实时性要求的系统中
周立功写给年轻人的一封信
今晚又是写程序睡不着写点东西吧也算是自己的一个总结首先是两个字“喜欢”!!一个东西光有10分钟的热度是不够的从事单片机就意味着你以后是和枯燥的程序调试乱码未知的软硬件错误熬夜脸上的豆豆什么什么的联系在一起(有点夸张哈哈)如果你选择了这种生活并且确定你有一种精神能指引你一路走到底至于什么精神只有你自己知道是满屏幕的0101 还是一串串胡乱的ABCD 还是成功后的成就感还是天生俱来的对电子类东西的痴迷还是喜欢别人在外面花天酒地却喜欢独坐电脑面前攻克技术的颠峰不需要理由世界上就有这样一种人不需要理由那么确定了上面的之后让我们开始吧单片机也叫做单板机单片微型计算机麻雀虽小五脏俱全那么如果你学过计算机组成原理我相信你应该能更好的理解单片机的内部结构如果没有学过也不要紧那就拿小麻雀开刀再一层层自下而上的到我们所用的PC刚开始学单片机的时候看到厚厚的一本书不要一咬牙要一下子把书全部看完看得仔仔细细明明白白先看看目录无非就是介绍单片机的历史然后它内部的组成原理然后是指令然后就是接口先说历史知道51单片机是现在资料最丰富最适合上手拿来开刀的就是了不要觉得书上的知识老这都N多年前的了现在是不是都不一样了兼容这个词比如你用ATC51 写的程序拿到ATS51 52 STC 都能用只是后续的片子在一些地方更加完善功能更强大比如在书上来掉牙的2051 上的MOV A,#00H 到其他51系列的上也是一样的你看它的片子的介绍上写了一句“完全兼容51系列单片机” 那么OK别管那么多只管用就是了我发觉我废话多了这不知道写到那去了。
抽跟烟继续。
上面的意思是说面前是一坐山很高然后我就一咬牙吗的慢慢爬吧我不信我爬不上去了或许爬到一半就退缩了退而再攻之我拿个测量仪来噢原来这山总共7000米半山腰有个亭子到那是3500米刚开始那1000米坡度很小2000米的时候有个茅房(^_^)6000米的时候有个美女正在洗澡山顶有个和尚庙行心中有了底上!!刚开始的时候初学一定要用汇编可能大家也看到了关与C和汇编的讨论各有各的说法我个人觉得初学者完全没有必要去追求什么飘逸的风格就用笨拙的汇编虽然它像一头大苯熊一样但是当你能和大笨熊亲切的交流屈驾自如的时候再去和漂亮的兔子MM 鸳鸯戏水会更加的得心应手汇编刚开始你会觉得很烦就是在那MOV 过去MOV 过来JB JC JN B JNC DJNZ 很难记不像C 一个IF 一个DO WHILE 就搞定的事但是用汇编你能更加了解一条指令在CPU 内存的执行过程能更加亲切的和P0 P1 P2 P3 的每一个口线交流不需要C 的屏蔽底层而是直接的就和底层亲密接触这里有人要说我了什么什么的还是那句话个人意见仅供参考在写延时程序的时候DJNZ 是双周期指令比如12M的那么一条指令是1US 那么你要精确的知道自己这段延时能延时多少US 多少MS 那么你对51单片机内部的指令周期对以后写有严格时序操作的程序就更加得心应手比如看到一个片子的PDF 数据总线要拉低多少MS 地址总线要拉高多少US 等待周期要等待多少US/MS 那么不要怀疑自己写指令搞定它成功以后你会发现你从最底层的了解了一个片子是怎么传送数据怎么通信这样的经历对你以后再接触其他片子的时候是莫大的帮助像关于书上的内容指令不用记得那么死或者说完全不需要记需要的时候马上查在查的过程中会更加加深你的印象(说点丢人的话JC JB JNB JB 这些指令我到现在都从来不记我又不应付考试我书随时就在旁边用的时候去翻就是了)这也就提到了练习程序和指令不要只看不用实践是检验真理的唯一标准实践出真知这都是老话了不过用在单片机的学习上是太贴切了单片机本来就是实践性很强的像我在学校的时候每次实验课都认真的做抓住每次上机的机会板子很贵自己买不现实而上机的时候能接触到的每一次都很宝贵LED流水灯十字口交通灯这些程序很基础在一次一次的小程序成功的过程中你会更加喜欢上单片机并且坚定继续为之不离不弃的决心熟能生巧我还记得我刚开始的时候经常是把指令写错把跳转的标号写错经常用系统的关键字变量未定一存储空间就用等等等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
周立功写给学单片机的年轻人的
作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。
您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。
当然,如果您现在看了我写的这篇文章可能还不算晚,因为您还有机会在以后的岁月里奋起直追——“亡羊补牢,尤未为晚”。
对于现在刚进入大学的学生,您应该更加珍惜这美好的求学机会,因为眨眼之间几年就过去了,您很快就会感到来自全社会生存竞争的压力,您面临的对手再也不仅仅是您身边的同学,今天您在班上的成绩的确是前几名,但一走到社会上去才感到是多么地脆弱而又多么地不堪一击。
在面试大多数本科生时,我仅仅是询问了一些有关MCS-51 系列单片机的基本原理,但却几乎很少有人能够完全答对,简直是五花八门。
很多作为一个即将毕业的自动化专业本科生,至今还不知道单片机是这个专业的核心基础,难道不可悲吗?您的水平不高我完全心中有底,其实我只要求这些学生能够掌握单片机应用开发的基本技能,用汇编和C51 写过一些基本的程序,真正动手做过一些简单的项目,然后将自己做过的项目写成比较规范的文档。
我想,这种形式的“自我介绍”肯定要比让别人看您那写的千遍一律的“八股文”简历不知要强多少倍,古人言:“一叶知秋”其实讲的就是这个道理。
平心而论只有具备这样基础的学生才配得上企业花钱对您进行二次“开发” 事实上,很多学生根本就不管老师平时是多么地劝导都听不进去,我认为您只要平时善于做一个有心人,主动一些多找老师请教,然后从大三开始帮老师打打下手干一些活。
还有一个途径就是自己花钱购买一些学习开发实验板,加强动手能力的训练。
但也有很多学生说没有钱,可事实上并非如此,
现在的学生购买手机成风,我不知道手机对你们现在来说到底有多大的用途?事实上,现在的学生家庭条件普遍都不太好,可这些孩子们的攀比心里却十分地严重和可怕。
到今天即将毕业之际才感到找工作太难。
父母一个子儿地攒下一些辛苦钱给您购买电脑容易吗?“望子成龙――可怜天下父母心”!他们是希望您能够学到一些真本事,而您可能很多时间都在玩游戏,上网聊天,实际上对于您来说仅仅是举手之劳,只要花几百元买一块实验板,辛苦一个暑假的时间强化实践,可能您就会与众不同。
与此同时,可能您的信心大增,前途一片光明。
俗话说得好:仓库有粮,心中不慌!如果您平时没有准备,那么临时匆匆忙忙地上阵面试肯定是要败下来的。
从2003 年开始是全国第一次扩招之后毕业人数最多的第一年,以后的毕业生还会更多,同时还有更多的研究生与本科生抢饭碗,面对就业的困境压力不能说不大,痛苦在其中。
还有就是我每天都要面临那些看不完的自我介绍简历,很可惜几乎都是清一色的“八股文”令人讨厌。
其实只要您的成绩不是太差,分数不是应聘成功的关键,重要的是做人要踏实,不要有水分,实际上,只要将您平时做过的小制作写成一篇心得,再带上您的作品,“事实胜于雄辩”这样更能打动人。
还有很多经历了四年本科又三年研究生阶段学习行将毕业的硕士生,不仅不知道嵌入式操作系统是什么东西,而且连C++都不能熟练掌握,驱动程序开发的能力就更不容提了,仅仅做了一个单片机的应用设计就拿到硕士文凭了,术业缺乏专攻泛泛而谈,说句实在话,怎么样也教人无法接受啊!对于我来说,如果您没有特别的才能,我宁愿用三年时间培养一个好的本科生给更高的待遇,他肯定不比一般的硕士生差。
所以,考上了研究生之后,您要时刻明白加强动手能力的培养和前沿科学技术的学习至关重要的,这是您将来面试的“杀手涧”,因为您毕业之后要求的
工资待遇起码是一般本科生的两倍,但是这个钱不是那么好拿的。
顶多3-5 年的时间,大家肯定能够看到一个现实,那就是如果您还不能熟练地掌握嵌入式操作系应用开发技术的话,您只能拿2000 元的月薪。
即便您是研究生或是博士,那又有什么稀奇的呢?
邓伯伯有句名言,不管白猫还是黑猫,抓住老鼠就是好猫!我们知道企业家是要赚钱的,否则这个企业就留不住人才,无情的市场竞争机制将会毫不犹豫地将这个老板淘汰出局。
一个可持续发展的企业,如果离开了富有聪明才智的优秀人才,那是不可想象的。
光有几个还不行,而是要有一个卓越的军团。
其实就业的问题,对于一个努力的人来说是何等地简单,我面试了300 多本科生,我只对其中几个成绩中等的本科生感兴趣,他们主要是参加过2001 年全国电子大赛,有的是平时业余时间,暑假及其寒假都在跟老师干活的学生,与他们聊天真是一种莫大的享受和欣慰,对于我来说真的是如获至宝。
于是,我就立即劝他们,您的成绩中等确实难以考上好的学校和导师还不如不考研究生以免浪费时间,同时也充满自信告诉他们,“我就是伯乐!我愿意给您机会和花钱培养您”。
事实上,即便您考上研究生,如果没有遇上具有超前眼光和经费充足的导师,您读了也白读,更何况现在的研究生扩招的这么多?一个导师带那么多研究生,有那么多课题吗?即便有的话,他应付得过来吗?可能残酷的现实将会让您看到,毕业之后回头一看还远远不如当年同您一道毕业的同班同学。
确实也是,人家的机会比您好得多,关键是人家对待机会比您把握得好,可以说:恰到火候。
难道非要读研究生理论水平才高吗?这是何等地荒谬啊!我们知道电子与计算机技术的发展日新月异。
大学的更新速度一定就要快吗?回答是否定的,比如说推广PHILIPS 的最
新单片机和USB 技术吧!他们的更新速度肯定比一个可持续发展的企业要慢得多,难道说我们的人才水平不够高吗?我们公司就有一批这样在各个领域里出类拔萃的“年轻专家”从2003 年开始,我们将会有一系列的专著在北京航空航天大学出版社出版,大多数的著作都来自于我们长期的基础研究和应用开发,可以毫不夸张地说这些都是我们这个年轻团队合作的结晶。
他们是优秀和卓越的人才,他们没有就业的压力,他们不怕炒鱿鱼,相反我倒时刻要想尽办法加强公司的管理,从工资,奖金,福利,生活和事业成就感等各个方面绞尽脑际善待人才和留住人才,这么努力的人才根本就不需要过多地为工作和生活发愁,对于这个问题当然是仁者见仁智者见智,也就是下面我要讲到的问题,一个人如何根据自己的特点、条件和机遇对自己如何定位的问题,也是至关重要的。
比如说,如果您对单片机的理解仅仅是入门水平的话,那么您首先就应该低调一些,因为您主要的任务是为了寻找一个可以学习的机会,说句实在话,此刻此刻您一定要清醒地意识到:寻找伯乐比眼前的利益更加重要!因为您现在确实还没有可以骄傲的资本,您一定要想尽办法取得第一次正式踏入社会的入场卷,这对您来说是何等地重要啊!俗话说得好,“万丈高楼从地起”您一定要寻找机会通过业绩表现出您的能力,您确实与众不同之处。
这样您就可能在一个公司里树立您的“信用”,有了信用之后随之而来的机会将会越来越多,到那时您根本就不用不愁自己的待遇和地位问题了。
所以对于一个刚刚步入社会的年轻人来说,您能够做到以“诚信” 打天下,您将来的前途肯定是无限光明。
千万不要感到自己在班上的成绩是前几名或者相对来说自己的动手能力相比之下比同学强多少、多少,或者自己在读书期间贷了多少款,或者家里是多么地缺钱,因为当您加入整个社会的竞争之后,这
些都不是您要求高薪的理由,这个时候您的心态将可能会决定您的命运,因此对自己要有充分的认识和正确的估价,经常是很多学生用这些理由向我开出高价,我无话可说只好“摇头和叹息”。
如果您的水平还不够,我认为也不要自卑,要知道机会是时刻属于有准备的年轻人,但也不可掉以轻心,此时此刻,您应该振作起来,立即拿起书本努力学习和加强实战的训练,待到羽翼丰满之时大胆地走出去闯荡,让社会来对您做一个恰当的评价,然后再根据现实的情况不断地调整自己,继续学习和实践,由于电子和计算机科学的高速发展呈现日新月异的变化局势,您一定要明白:您距离失败永远只有6 个月!。