周立功说
周立功谈我的25年嵌入式生涯

有些理念,很值得工程师们思考!
周立功,男,1964年3月出生,毕业于东华大学自动化及计算机系,高级工程师,中国单片机学会理事,中国海洋大学讲座教授,硕士生导师,主要研究方向为嵌入式系统与现场总线,目前正在从事80C51、ARM与Nios II等软核SoC的研究与开发。
下面我会把我“第一桶金”的故事告诉你,这也是尽量减少“阶段0”开发一个非常典型的例子。
当年,《羊城晚报》几乎每天都有半版广告刊登信息台(听歌、悄悄话等)广告,一打听广告费每天几十万。当时相信不少人在利用公费电话在拨打这些信息台。后来我送货到客户那里发现电话机都外加了一个铁壳并上了一把锁,从看到那一幕开始,我决定做电话加密码锁,锁长途电话0字头,手机、BB机、信息台的9字头。通过朋友介绍,福州某公司有这个技术,于是我打了一个试探性的电话,使用5000元购买方案和源代码,对方非常爽快地同意了。我生怕有变立即坐飞机到福州去,很快就见到了郑新建工程师,他原来在福州某公司工作,我见到他的时候已经离开了福州某公司,但仍然自己写一些产品解决方案,通过福州某公司销售。买到方案与源代码之后,我立即带样机到各地去做测试,发现这台样机兼容性太差,而且市场已经开始在卖的产品也存在同样的问题,我想只要解决好兼容性的问题,如果在任何地区交换机局域网都能够使用,那就是最好的产品不愁没有市场。
也许有程序员会关心JTAG开发工具问题,那也是一个“外包”的项目。当时,我们在网上发现了一个由计算机爱好者业余时间设计的H-JTAG,这是一个比较稳定的调试器软件,正好适合我们使用。于是我就同设计者联系,并决定由周立功单片机资助他继续开发,同时,其开发成果还免费提供给网上的用户下载,保证它作为一个自由软件。其实,无论是Linux还是H-JTAG都是开源软件,如果担心其它的同行因此受益而超越自己的话,难免需要在公司负担很多开发人员,面面俱到地做许多事实上是重复的开发工作。其实,我们的合作伙伴都是所在领域的专家,如果自己从头到尾去学习和开发,不仅抢了合作伙伴的饭碗,而且结果未必理想。这种情况下不但会延误宝贵的商机,而且还会影响与合作伙伴之间的关系。其实只要引入我们企业长期积累和制定的嵌入式系统工程管理思想和规范,即可得到自己想要的结果:“做你最擅长的,其余的外包”,类似这样的案例在周立功单片机将会越来越多。
周立功dbc解析 -回复

周立功dbc解析-回复周立功(DBC)是一种在软件开发过程中常用的技术,它通过定义每个类和函数的前置条件、后置条件和类不变式,来增强程序的健壮性和可靠性。
本文将逐步解析周立功DBC,并深入探讨其在软件开发中的应用。
一、什么是周立功DBC?周立功DBC(Design By Contract),也称为契约式编程,是一种基于契约的软件设计方法。
它倡导在软件开发过程中将各个组件的功能需求以契约的形式明确约定,并通过前置条件、后置条件和类不变式来描述这些契约。
具体而言,前置条件规定了函数或方法在被调用前的输入要求,后置条件则规定了函数或方法在执行完成后的输出保证,而类不变式则保证了对象在整个生命周期中的可用性。
周立功DBC的核心概念是“防御式编程”,即通过预先定义契约,使代码能够主动检测和处理异常情况,从而增加程序的稳定性和可维护性。
使用周立功DBC的代码和不使用的代码相比,具有更强的自解释性和容错性。
二、周立功DBC的使用方式周立功DBC通过前置条件、后置条件和类不变式,指导程序员定义并约定代码的行为。
下面将详细介绍这三个概念的使用方式:1. 前置条件(Preconditions)前置条件描述了函数或方法在被调用前的输入要求。
它们是一些必要的条件,确保函数或方法可以在被调用时正常运行。
前置条件包括输入参数的合法性检查、对象状态的一致性判断等。
通过检查前置条件,可以避免不符合要求的参数导致的错误或异常。
例如,当一个函数要求输入的参数必须为正整数时,它的前置条件可以写作:输入参数大于0且为整数,否则抛出异常或返回错误码。
2. 后置条件(Postconditions)后置条件定义了函数或方法在执行完成后的输出保证。
它们规定了函数或方法所返回的结果,以及对于输入参数或对象状态的任何修改。
后置条件可以验证函数或方法的正确性,并充分保证了它们的输出在正确范围内。
例如,一个排序函数的后置条件可以是:返回的结果是按照升序排列的,且与输入参数中的元素一一对应。
周立功致远电子PA6000怎样高效测试跟踪效率

©2014 Guangzhou ZHIYUAN Electronics Stock Co., Ltd. 文章源自 ZLG 致远电子,转载或引用请注明出处 2
广州致远电子股份有限公司
周立功致远电子 PA6000 怎样高效测试跟踪效率
方案优势: 最多支持 7 个功率输入单元,输入功率与输出功率同步测试,进一步提高准确度
静态最大功率点跟踪效率反应的是在给定静态 PV 组件的特性曲线上,逆变器调节跟踪最大 功率点的精度。 注:
U DC ,i
和
I DC ,i
必须是同一时间的采样值。
动态最大功率点跟踪效率的测试要求
©2014 Guangzhou ZHIYUAN Electronics Stock Co., Ltd. 文章源自 ZLG 致远电子,转载或引用请注明出处 1
所以 MPPT 动态最大功率跟踪效率测量,我们应该测出太阳电池输出的电压电流及最大 功率输出,并进行上述公式的计算,才能得出结论。 MPPT 效率评估专家:PA 功率分析仪 过去测试人员在进行 MPPT 效率评估时,需要先用功率分析仪测试出一段时间内的光伏 逆变器输入功率的积分,然后再通过公式人手计算出 MPPT 效率,测试效率低下。 PA6000 功率分析仪具备动态与静态 MPPT 效率测量功能,在积分模式下可实现 MPPT 效 率的高精度自动测量,直接显示效率测量结果,节省了人工处理数据的时间。
传统测量转换效率,由于测量设备通道数有限,输入与输出只能分开测量,这样导致采 集到的数据缺乏同步性,由此算得的转换效率自然不准确。针对多路输入的光伏逆变器, PA6000 可轻松实现 4 通道输入,3 通道输出同时采样,并且 PA6000 内部采用高稳定度温度 补偿的 100M 同步时钟实现 7 通道的 ADC 同步采样,同步采样时钟误差小于 10ns,满足高效 能逆变器效率的极致测量要求。 支持权重系数自由切换,方便导出各地区效率报表 PAM 软件能够自由切换权重系数,支持欧洲效率、CEC 效率、中国各地区权重系数计算, 并能快速的导出相应地区的效率报表,PA6000 是业内唯一支持效率权重系数自由切换的功 率分析仪器。 支持自定义效率公式,方便导出 MPPT、转换效率报表 支持自定义效率测试公式,能同时显示 6 个效率测试结果,方便同时测量 MPPT 效率, 转换效率。PAM 软件能够导出测试静态与动态 MPPT 报表,转换效率报表,方便检测机构进 行操作,大大提高了工作效率。
周立功 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年前开始研发那才是真正叫快,才能立于不败之地,我觉得这才是具备了远见。所以说为什么很多中国企业没有研发,没有远见所以永远尝不到研发的甜头,不会有决心可持续投入去研发,不敢承担研发风险,没有尝到甜头,一旦尝到了就会可持续发展地投入。研发是一个企业可持续发展的源泉。
周立功博文集锦

成功心法(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语言的标准中,对执行环境的解释大致如下:????执行环境是指程序经过翻译后执行的环境,执行环境与翻译环境可以是同一环境,也可以是不同环境。
周立功“3+1”创新教育概况
周立功“3+1”创新教育概况以“四个晋级阶梯”的人才培养模式规划四个阶段的课程体系。
下面列出了每个阶段必须开设的课程,并对每个阶段的人才培养加以说明。
大学一年级不能再相信计算机等级考试的检验结果,实际上众多已经通过2-3级计算机等级考试的大学生毕业之后还是不会设计软件,可谓教训深刻。
大学要培养会编程且能够找到工作的开发工程师。
要积极主动地帮助学生成立跨学院的计算机软件编程兴趣小组(计算机俱乐部),同时要营造相互监督,相互比着学的氛围。
由学校提供活动场所,学生自己带电脑,充分利用课余与周末的两天时间强化计算机程序设计技术,学校安排专业教师指导和管理,并在暑期开展强化训练班培养精英人才。
争取一年后每位学生至少设计5000-10000行C语言程序代码,依此培养学生对编程的兴趣和积累一定的经验,为后续课程和参加全国大学生电子竞赛打下扎实的基础。
为了提高学生动手实践的积极性,期间一定要主办全校性的计算机程序设计大赛,评出一、二、三等奖。
大一阶段的编程实践经验就能够为学生在大三学习《单片机原理与应用》这门重要的课程,甚至是终生职业生涯中最常用的谋生手段奠定基础。
大学二年级大学二年级是学生学习专业基础理论,打好基础的关键性阶段,但需要教师创造性地给学生传授知识,这就是为什么要求教师备课的原因,现在很多的年轻教师十分不明白其中的原由。
讲授《电路分析基础》的教师不能受到老教材局限性的束缚,一定要在相关的章节联系后续内容做好铺垫性的教学。
比如讲到RC电路时,可以给学生解析单片机高、低电平复位电路的原理,RC 充电机理与波形,还要联系RC微分、积分电路等滤波电路的原理与作用。
讲授《模拟电子技术基础》AD转换器,可以重点阐述电压基准源、光电隔离器件、微功率DC/DC 电源模块与运放电路的选型与设计,如何将外部输入的5V电压衰减一倍变成AD所能够接受的2.5V 的电压,以及如何将外部的4-20mA的电流信号转化为电压信号。
周立功ARM培训精华(全套).pdf
周立功单片机
• 现实中的嵌入式系统
周立功单片机
• 嵌入式系统的概念
目前,对嵌入式系统的定义多种多样,但没有一 种定义是全面的。下面给出两种比较合理定义: ●从技术的角度定义:以应用为中心、以计算机技 术为基础、软件硬件可裁剪、适应应用系统对功能、 可靠性、成本、体积、功耗严格要求的专用计算机 系统。 ●从系统的角度定义:嵌入式系统是设计完成复杂 功能的硬件和软件,并使其紧密耦合在一起的计算 机系统。术语嵌入式反映了这些系统通常是更大系 统中的一个完整的部分,称为嵌入的系统。嵌入的 系统中可以共存多个嵌入式系统。
周立功单片机
• 嵌入式处理器
——嵌入式片上普及化及半导体工艺的迅速发 展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是 System On Chip(SOC)。各种通用处理器内核将作为SOC设计公司的 标准库,和许多其它嵌入式系统外设一样,成为 VLSI设计中一种标 准的器件,用标准的 VHDL等语言描述,存储在器件库中。用户只 需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体 工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统 大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很 简洁,对于减小体积和功耗、提高可靠性非常有利。 SoC可以分为通用和专用两类。通用系列包括Infineon的TriCore、 Motorola的M-Core、某些ARM系列器件、Echelon和Motorola联合研 制的Neuron芯片等。专用SoC一般专用于某个或某类系统中,不为 一般用户所知。一个有代表性的产品是Philips的Smart XA,它将XA 单片机内核和支持超过2048 位复杂RSA算法的CCU单元制作在一块 硅片上,形成一个可加载JAVA或C语言的专用的SOC,可用于公众 互联网如Internet安全方面。
周立功教授谈迭代器模式设计
周立功教授谈迭代器模式设计近日周立功教授公开了数年的心血之作《程序设计与数据结构》,电子版已无偿性分享到电子工程师与高校群体下载,经周立功教授授权,特对本书内容进行连载。
>>>> 1.1 迭代器模式>>> 1.1.1 迭代器与容器 1.1.2 迭代器接口为什么一定要考虑引入Iterator这种复杂的设计模式呢?如果是数组,直接使用for循环语句进行遍历处理不就可以了吗?为什么要在集合之外引入Iterator这个角色呢?一个重要的理由是,引入Iterator后可以将遍历与实现分离。
实际上无论是单向链表还是双向链表,其查找算法与遍历算法的实现没有多少差别,基本上都是重复劳动。
如果代码中有bug,则需要修改所有相关的代码。
为什么会出现这样的情况呢?主要是接口设计不合理所造成的,其最大的问题就是将容器和算法放在了一起,且算法的实现又依赖于容器的实现,因而必须为每一个容器开发一套与之匹配的算法。
假设要在2种容器(双向链表、动态数组)中分别实现6种算法(交换、排序、求最大值、求最小值、遍历、查找),显然需要2×6=12个接口函数才能实现目标。
随着算法数量的不断增多,势必导致函数的数量成倍增加,重复劳动的工作量也越大。
如果将容器和算法单独设计,则只需要实现6个算法函数就行了。
即算法不依赖容器的特定实现,算法不会直接在容器中进行操作。
比如,排序算法无需关心元素是存放在数组或线性表中。
在正式引入迭代器之前,不妨分析一下如程序清单 3.49所示的冒泡排序算法。
程序清单 3.49 冒泡排序算法1 #include2 #include "swap.h"34 void bubbleSort(int *begin, int *end)5 {6 int flag = 1; // flag = 1,表示指针的内容未交换7 int *p1 = begin; // p1指向数组的首元素8 int *p2 = end; // p2指向数组的尾元素。
周立功谈大学生如何积累经验
周立功谈大学生如何积累经验.txt爱尔兰﹌一个不离婚的国家,一个一百年的约定。
难过了,不要告诉别人,因为别人不在乎。
★真话假话都要猜,这就是现在的社会。
很多大学生一听到用人单位提到工作经验就头晕了,因为自己还没有参加工作,哪来的工作经验呢?站在招聘者的立场来看,我认为不要死搬硬套地将工作经验理解为实实在在参加工作所积累的经验,就电类专业来看,用人单位需要应聘者熟练掌握产品开发所需要的技能,比如,C或者C++程序设计,数字逻辑电路设计......很多人埋怨在大学期间没有学习和积累的机会,真的是这样的吗?事实上,博友zhoufans撰写的“电容充放电问题——基于Multisim8示波器的使用(1)”就是一篇很好的学习和工作总结文章,从中可以看出作者的钻研精神,作者是一位会想办法、主动寻求解决问题的灵活性较强的大学生(详见作者在百度上的提问记录/.html)。
当然这仅仅是博友zhoufans写作的第一篇文章,其中的瑕疵不少,原稿的排版格式也是比较乱的,错别字不少,一些语句也不够通顺,而已经发表的文章是经过我加工过的,我想只要对作者经过一些基本的训练,以后写作的文章就会有很大的进步。
如果作者坚持写下去的话,在校期间至少可以写作上百篇风格各异的小论文,也可以完成大量的实践小制作,比如参加博主所倡导的“释放激情!大家一起来DIY自己的创意梦想”活动,还有各种各样的电子竞赛,这些都是在校大学生积累“工作经验”最好的途径。
如果zhoufans能够将自己长期积累的小论文和小制作一一整理装订成为一本精美的小册子的话,那么寻找一份好工作是非常容易的。
与此同时还可以用自己的小制作和小论文为蓝本,为学弟学妹们举办技术讲座,借此提升自己的组织能力和演讲能力,全面提升自信心等各种能力,力争在大学期间将自己培养成为出类拔萃的优秀人才。
我经常会接到很多在校大学生的来信,要求有机会来公司实习。
说句内心话,对于在校大学生这样的机会不多,企业一旦接受在校大学生来实习,对正常的管理工作势必带来很大的麻烦,而且还会消耗企业一定的资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
珍惜求学机会
作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。
您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。
当然,如果您现在看了我写的这篇文章可能还不算晚,因为您还有机会在以后的岁月里奋起直追——“亡羊补牢,尤未为晚”。
对于现在刚进入大学的学生,您应该更加珍惜这美好的求学机会,因为眨眼之间几年就过去了,您很快就会感到来自全社会生存竞争的压力,您面临的对手再也不仅仅是您身边的同学,今天您在班上的成绩的确是前几名,但一走到社会上去才感到是多么地脆弱而又多么地不堪一击。
面试本科生
在面试大多数本科生时,我仅仅是询问了一些有关MCS-51系列单片机的基本原理,但却几乎很少有人能够完全答对,简直是五花八门。
很多作为一个即将毕业的自动化专业本科生,至今还不知道单片机是这个专业的核心基础,难道不可悲吗?您的水平不高我完全心中有底,其实我只要求这些学生能够掌握单片机应用开发的基本技能,用汇编和C51 写过一些基本的程序,真正动手做过一些简单的项目,然后将自己做过的项目写成比较规范的文档。
我想,这种形式的“自我介绍”肯定要比让别人看您那写的千遍一律的“八股文”简历不知要强多少倍,古人言:“一叶知秋”其实讲的就是这个道理。
平心而论只有具备这样基础的学生才配得上企业花钱对您进行二次“开发”。
事实上,很多学生根本就不管老师平时是多么地劝导都听不进去,我认为您只要平时善于做一个有心人,主动一些多找老师请教,然后从大三开始帮老师打打下手干一些活。
还有一个途径就是自己花钱购买一些学习开发实验板,加强动手能力的训练。
但也有很多学生说没有钱,可事实上并非如此,现在的学生购买手机成风,我不知道手机对您们现在来说到底有多大的用途?事实上,现在的学生家庭条件普遍都不太好,可这些孩子们的攀比心里却十分地严重和可怕。
到今天即将毕业之际才感到找工作太难。
父母一个子儿地攒下一些辛苦钱给您购买电脑容易吗?“望子成龙――可怜天下父母心”!他们是希望您能够学到一些真本事,而您可能很多时间都在玩游戏,上网聊天,实际上对于您来说仅仅是举手之劳,只要花几百元买一块实验板,辛苦一个暑假的时间强化实践,可能您就会与众不同。
与此同时,可能您的信心大增,前途一片光明。
俗话说得好:仓库有粮,心中不慌!如果您平时没有准备,那么临时匆匆忙忙地上阵面试肯定是要败下来的。
从2003 年开始是全国第一次扩招之后毕业人数最多的第一年,以后的毕业生还会更多,同时还有更多的研究生与本科生抢饭碗,面对就业的困境压力不能说不大,痛苦在其中。
还有就是我每天都要面临那些看不完的自我介绍简历,很可惜几乎都是清一色的“八股文”令人讨厌。
其实只要您的成绩不是太差,分数不是应聘成功的关键,重要的是做人要踏实,不要有水分,实际上,只要将您平时做过的小制作写成一篇心得,再带上您的作品,“事实胜于雄辩”这样更能打动人。
还有很多经历了四年本科又三年研究生阶段学习行将毕业的硕士生,
不仅不知道嵌入式操作系统是什么东西,而且连C++都不能熟练掌握,驱动程序开发的能力就更不用提了,仅仅做了一个单片机的应用设计就拿到硕士文凭了,术业缺乏专攻泛泛而谈,说句实在话,怎么样也叫人无法接受啊!对于我来说,如果您没有特别的才能,我宁愿用三年时间培养一个好的本科生给更高的待遇,他肯定不比一般的硕士生差。
所以,考上了研究生之后,您要时刻明白加强动手能力的培养和前沿科学技术的学习至关重要的,这是您将来面试的“杀手锏”,因为您毕业之后要求的工资待遇起码是一般本科生的两倍,但是这个钱不是那么好拿的。
顶多3-5 年的时间,大家肯定能够看到一个现实,那就是如果您还不能熟练地掌握嵌入式操作系统应用开发技术的话,您只能拿2000 元的月薪。
即便您是研究生或是博士,那又有什么稀奇的呢?邓伯伯有句名言,不管白猫还是黑猫,抓住老鼠就是好猫!我们知道企业家是要赚钱的,否则这个企业就留不住人才,无情的市场竞争机制将会毫不犹豫地将这个老板淘汰出局。
一个可持续发展的企业,如果离开了富有聪明才智的优秀人才,那是不可想象的。
光有几个还不行,而是要有一个卓越的军团。
就业问题
其实就业的问题对于一个努力的人来说是何等地简单,我面试了300 多本科生,我只对其中几个成绩中等的本科生感兴趣,他们主要是参加过2001 年全国电子大赛,有的是平时业余时间,暑假及其寒假都在跟老师干活的学生,与他们聊天真是一种莫大的享受和欣慰,对于我来说真的是如获至宝。
于是,我就立即劝他们,您的成绩中等确实难以考上好的学校和导师还不如不考研究生以免浪费时间,同时也充满自信告诉他们,“我就是伯乐!我愿意给您机会和花钱培养您”。
事实上,即便您考上研究生,如果没有遇上具有超前眼光和经费充足的导师,您读了也白读,更何况现在的研究生扩招的这么多?一个导师带那么多研究生,有那么多课题吗?即便有的话,他应付得过来吗?可能残酷的现实将会让您看到,毕业之后回头一看还远远不如当年同您一道毕业的同班同学。
确实也是,人家的机会比您好得多,关键是人家对待机会比您把握得好,可以说:恰到火候。
难道非要读研究生理论水平才高吗?这是何等地荒谬啊!我们知道电子与计算机技术的发展日新月异。
大学的更新速度一定就要快吗?回答是否定的,比如说推广PHILIPS 的最新单片机和USB 技术吧!他们的更新速度肯定比一个可持续发展的企业要慢得多,难道说我们的人才水平不够高吗?我们公司就有一批这样在各个领域里出类拔萃的“年轻专家”从2003 年开始,我们将会有一系列的专著在北京航空航天大学出版社出版,大多数的著作都来自于我们长期的基础研究和应用开发,可以毫不夸张地说这些都是我们这个年轻团队合作的结晶。
他们是优秀和卓越的人才,他们没有就业的压力,他们不怕炒鱿鱼,相反我倒时刻要想尽办法加强公司的管理,从工资,奖金,福利,生活和事业成就感等各个方面绞尽脑际善待人才和留住人才,这么努力的人才根本就不需要过多地为工作和生活发愁,对于这个问题当然是仁者见仁智者见智,也就是下面我要讲到的问题,一个人如何根据自己的特点、条件和机遇对自己如何定位的问题,也是至关重要的。
定位问题
比如说,如果您对单片机的理解仅仅是入门水平的话,那么您首先就应该低调一些,因为您主要的任务是为了寻找一个可以学习的机会,说句实在话,此时此刻您一定要清醒地意识到:寻找伯乐比眼前的利益更加重要!因为您现在确实还没有可以骄傲的资本,您一定要想尽办法取得第一次正式踏入社会的入场券,这对您来说是何等地重要啊!俗话说得好,“万丈高楼从地起”您一定要寻找机会通过业绩表现出您的能力,您确实与众不同之处。
这样您就可能在一个公司里树立您的“信用”,有了信用之后随之而来的机会将会越来越多,到那时您根本就不用不愁自己的待遇和地位问题了。
所以对于一个刚刚步入社会的年轻人来说,您能够做到以“诚信” 打天下,您将来的前途肯定是无限光明。
千万不要感到自己在班上的成绩是前几名或者相对来说自己的动手能力相比之下比同学强多少、多少,或者自己在读书期间贷了多少款,或者家里是多么地缺钱,因为当您加入整个社会的竞争之后,这些都不是您要求高薪的理由,这个时候您的心态将可能会决定您的命运,因此对自己要有充分的认识和正确的估价,经常是很多学生用这些理由向我开出高价,我无话可说只好“摇头和叹息”。
努力学习
如果您的水平还不够,我认为也不要自卑,要知道机会是时刻属于有准备的年轻人,但也不可掉以轻心,此时此刻,您应该振作起来,立即拿起书本努力学习和加强实战的训练,待到羽翼丰满之时大胆地走出去闯荡,让社会来对您做一个恰当的评价,然后再根据现实的情况不断地调整自己,继续学习和实践,由于电子和计算机科学的高速发展呈现日新月异的变化局势,您一定要明白:您距离失败永远只有6 个月!。