我是怎么自学技术的-嵌入式篇

在之前的两篇自学技术文章之后,总觉得嵌入式还没讲完。因为嵌入式的开发,既有软件又有硬件,软硬结合得非常深入,可以这么说,不熟悉电子电路和硬件性能的,又或者不精通编程语言和思想的,都做不好嵌入式开发。

 

先来谈一下定义,很多人会把嵌入式和单片机搞混,但大多时候,两者的词义在某些场景下好像也可以通用。嵌入式的英文是Embedded System,中文应该叫嵌入式系统了。比较完整的解释是: 嵌入式系统,是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 由此可见,嵌入式一词,包括软件和硬件的开发,是一整套完整的专用计算机系统。

(此处的计算机一词,也并非完全指PC电脑,电脑也并非只有PC机......)

上图是嵌入式系统样例,图片来自百度

而单片机的则要简单得多,单片机的全称应该叫单片微机或者单片微控制器,英文是MCU (Microcontroller Unit),它集成了CPU,RAM,ROM,IO口等功能。单片机的内核,常见的有8051,AVR,ARM,每种IP核都有自己的指令集。我们所熟悉的电脑的CPU,是8086内核,本质上也是一个大型的单片机。

常见的单片机的外观--集成电路芯片 Integrated Circuit Chip

最常见的MCU有80C51和STM32系列,内部有ROM,可以存放代码,也称之为固件 Firmware,在CPU上电之后,会执行ROM中的代码,CPU计算过程缓存到RAM,输入输出则对应着IO口。

 

正常来讲,嵌入式开发,一般都是包括软件和硬件的开发。

 

但是行业内也有另外一种区分的方法,因为嵌入式软件有大小系统之分,支持MMU(Memory Management Unit,内存管理单元)的,可以跑Linux,Android等大系统,称之为嵌入式;而不支持MMU的,跑RTOS或FreeRTOS等小系统的称之为单片机。

 

说回正题,我最早接触单片机是在2003年,用atmel公司的80C51,使用的是南京伟福公司的6000编译器,编写汇编语言。因为公司同事都是用这个软件开发,当时也不知道有keil编译器,可以支持C语言开发,也就硬着头皮学下来了。后来查了一下,原来keil C51编译器在1988年就已经上市了,只比我小几岁而已。

2003年的网购环境,不像现在这么便捷,很多元器件,都要到广州的赛格电子城去购买,而线路板画好之后,更是一个麻烦事,很少有工厂会接打样的订单,有也很贵。不像现在,万能的淘宝几乎可以买到任何电子元器件,线路板画好之后,上传到立创等PCB样板网站最快24小时就收到货了。

 

我的第一个正式的单片机研发项目,使用飞利浦(现在的NXP)的芯片,记得型号是LPC908,TSOP8个脚位,不需要外部晶振,默认带一个UART,只需要3.3V供电即可。当时这个项目也非常简单,是一个三星手机的恢复出厂值的小设备,上电启动时,设置好串口波特率,特定的时间发送3次数据,三星的手机就恢复出厂设置了。当时芯片选型,线路板,指令抓取和单片机程序都是我一个人完成。

 

出来创业后,做的项目就比较多了。用过的单片机型号,估计都有二三十种了吧,各种高中低端的芯片,普通的51单片机,AVR的,ARM的,带蓝牙的,wifi的,全世界最便宜的,五花八门,琳琅满目。

 

 

做嵌入式开发也十几年了,给后浪们总结了几条经验,也欢迎各位补充指正。

 

1、做嵌入式开发,还是要深入去了解硬件,虽然现在工作的岗位区分比较明显,但在我入行的时候,硬件软件可没有分的这么清。原理图线路板,有时间学画一画,对自己技术也是一种提高,对硬件的理解也有帮助,也不是非要那么精通,但自己亲手画过几个板子,做过几个项目之后,相信你会有不同的理解。

 

2、英语的底子还是要加强,做嵌入式开发,如果看不懂芯片的Datasheet,那基本没办法工作的。其实和写代码编程一样,只要能看懂,能理解,基本上在工作上应该就不会有障碍了。但是不能逃避,有些同学用汉化软件,找中文数据手册,这点我是不赞成的。

 

3、嵌入式开发从软件上分为小系统和大系统,我是建议都要掌握。从STM32的裸机系统开始,再尝试跑个RTOS或国内的RT-Thread,基础打牢了,再转向Linux的系统,这样就比较完整了。即使是从Linux入门工作到现在的,我还是建议花点时间搞搞单片机,买一个stm32的开发板也很容易,嵌入式硬件基础要熟悉,而软件更是要精通。

 

4、开发工具要熟练,我发现很多同学拿个开发板到手,就直接接电开机,我的习惯的不管啥板子,我都接稳压源开机,一来可以看看工作电流,对功耗有一个概念,二来把短路电流CC设置小一点,也可以防止硬件问题烧坏主板。还有万用表,示波器,逻辑分析仪都是必备工具,特别是逻辑分析仪,对写软件的工程师来讲简直是救命神器。

 

5、各种软件IDE开发工具要熟练,很多人不知道keil有单步调试和断点调试的功能,调试软件全部用log输出或者串口打印输出,开发效率太低下了。除非是linux或者android的开发,那确实没法在线调试或仿真,但涉及算法都可以在VC++上面调试跑通之后,再移植过去。

 

最后讲一句啰嗦话,搞嵌入式要沉得住心,不要那么浮躁。作为搞技术和创业多年的人,在我眼中,做硬件两三年的同学,才刚入门呢。

 

注:文章来源于棒棒龙。

2020年6月12日 10:28