怎样混好嵌入式/MCU/ARM/DSP这一行?

很多初学者,甚至是混了好几年的老手,都在抱怨,电子这行怎么竞争这么大啊? 颓废,这完全在抹杀自己的激情,没了激情,搞电子,完全就是在浪费生命。其实,竞争真的大吗??对比一下,难道做业务的竞争不大,做管理的竞争不大,现在这个社会,哪个领域,哪个行业,竞争都大。

所以,假如你想逃避竞争,那你就不用活了,当然,你本身家庭很好,父辈好有钱的话,那另当别论!所以, 不管什么行业,竞争大不大的问题,都不用问了。答案都是:竞争大,但是必须面对,我们要自己面对的竞争越小,那么你的技术能力应该是越牛X。搞电子的人要跟得上时代,但是人的脑袋会随着年龄的增大而迟钝,所以这就造成了电子人才(特别是搞电子软件)的一种生老病死的自然规律。

也就是说,一般40岁左右的技术人才,有三种出路。

第一,自己创业了或者是技术管理层,完全脱离技术,请几个二十来岁的新手,让他们去发掘脑袋,自己在一旁,靠着自己的经验,嘴巴说说可以了。

第二,转行了,这个不好评论,不知是祸是福。

第三,继续做技术,但是这种会很累,天天逼着自己学习,还吃力不讨好,也不敢轻易换工作了,因为此时编程思维固定,工作激情缺乏,学习能力偏低,一个新的工作环境很难让他适应,这种情况,假如不是元老级人物,或者已经是个技术负责人,那么很容易被一个新手所代替。也就是说,搞了十多年技术之后,这批人将慢慢的淡出这个行业,新老交替,长江后浪推前浪。

所以真正的技术人才永远都缺,前提是你真的有能力。所以,只要有能力,你永远都吃香的,永远都不怕竞争,就不应该担心竞争大不大的问题,而是担心自己牛不牛的问题。

01
怎样学好单片机? 

我大二就开始自学单片机(我们学校的单片机课程是大三开的,汇编版),那时候,我完全不懂什么是单片机,照着书上的原理图自己用万用板焊接,按键,数码管,串口,电位器,温度传感器,等等都不懂,反正就是照焊,不懂的,找网络。程序一点都不懂,哈哈,还是照搬,写好编译,烧录进去,行了,但是还是不懂。哈哈。但是这就给自己一个很大的自信心,记住,搞电子的人,永远都是成就感第一,虽然不懂,做出来了,还是很有成就的。慢慢的,到了大三,开始学单片机和C语言了,老话,上课要专心。此时,重要的一点是,学了理论,要付之于实践,我以前就经常跑实验室,回去宿舍,也搞搞单片机,编编程序,调试调试开发板等等。这段时间很重要,同样一起上课,为什么有些人就不适合搞电子,因为此时,他们都没有动手,忘得太快了。

学单片机,是软硬件的综合体。并不是单单会点汇编或者C语言就说会单片机,这顶多只能说会编程而已。因为大部分单片机系统都是不带操作系统的裸机系统,那么没有所谓的操作系统和应用软件,没有操作系统层所封出来的一些接口可用,也就是说,需要架一个简单的前后台系统,只会写应用软件,就比较难使用单片机,因为他们对这些只有硬件,没有软件接口的东西,无从下手。所以,学单片机,首先学会硬件,也就是简单的电阻电容电感,三极管,二极管,比较器,等等相关的基础元器件特性及其应用。个人觉得,大学教程的模电数电很重要,先模后数,模电是数电的基础,也是电子这块的基础,显得特别重要。然后数电就要吸取其思想,很多数电所介绍的集成IC,比如门电路,计数器,触发器,比较器,运算器等等,现在工业很少见的了,但是,其设计思想是值得学习的。

理解单片机内部的人就清楚,单片机或者其他的主控(ARM DSP等)的内部其实也就是这些东东高度集成而来的。所以,学单片机的时候或者之前,先抽时间学习一下模电数电,学到自己有所理解的程度,就可以学一下单片机编程,C语言或者汇编都可以,看个人爱好,C语言移植方便,好维护,编程快速,但是缺点是其编译出来的CODE比较占空间,一般用于移植性通用型要求高的嵌入式软件领域,或者比较大的单片机项目,或者要求开发速度而对价格不敏感的产品。而汇编刚好相反,对利润薄,成本低,开发难度不大的行业使用,比如小家电。不过现在的MCU也很便宜的,几块钱都几十k的FLASH ROM,在现在技术人工那么贵的情况下,估计还是C语言比较迎合市场。学习这些理论知识的同时,都需要动手做实验,不怕搞错,最怕就是懒得搞。

02
会编程之后,怎样切入单片机?  

初学者学了编程语言的之后,又或者搞纯软件想转单片机的人,都会有个共同的特点就是,下一步不知道如何入手?

那么我就会问,你懂硬件吗?要求不高,略懂就好,不求很精,因为硬件这东西是越老越辣,越久越醇,锻炼多了,自然会精。

假如你一点都不懂,那请看上面的一段,学硬件基础去吧。

假如略懂,那么你现在的切入点就是在五花八门的单片机中找一款合适的入门单片机,初学者做任何决定都是以“易入手”为标准,入手了,就不怕你以后跑不快,力求找些通用的MCU,资料多,软件平台也多,容易上手,比较51核的,虽然简单,但是它是鼻祖,学起来方便,只要懂了这个鼻祖,其他的再复杂的东西,也不过它繁殖出来的,不会太难。一下子搞太难的东西,不单学不会,还会打击自己的脆弱的心灵。

选好了单片机,那就搭开发平台,首先是软件开发平台,针对不同的单片机内核或者型号,有不同平台,通用性51核的KEIL51,AVR的IAR ICC,还有很多不同厂家的开发平台,不一一列举。其次就是单片机硬件平台了,也就是开发板,不同的单片机器引脚和外围都稍有不同,所以开发板也有针对性,网上很多卖开发板的,都希望做的很通用,支持很多种型号的MCU,价格也不高,假如怕麻烦,怕焊接出错的初学者,可以买,关键是现在的开发板便宜,几十块钱很漂亮,以前那个年代动不动几百块,流血啊。当然,我更推荐是自己焊接,特别是自我感觉硬件还可以的人,趁此机会锻炼一下焊工,还有,会对电路理解更深的。其实各种各样的开发板都是一样的,只要你焊接遵循以下原则:

首先,焊接最小工作环境,电源电路,复位电路,振荡电路(现在很多MCU都集成内部晶振,精度也可以,频率也比较高)。然后就是其他的常用的外设电路,按键输入(按键多的话,可以用矩阵,学学矩阵扫描),串口(UART),AD/DA,蜂鸣器,数码管,点阵显示屏,电机驱动,温度传感器等等,这些资料很多的了,几十年来,初学者都是学这些。

这些外围电路,网上资料多得是,随便找几份对比一下就有了。找个万用板,就可以动手焊了。不成功的,测量单片机工作电压正不正常,晶振有没有起振,复位电路有没有搞错等等,再不成功,焊多一块,哈哈。有了软硬件平台,就可以一个实验一个实验的动手,开始是模仿,后来就改动,再后来就完全自己搞一个有新意的,从0开始写code,做第一个属于你自己的project。顺便说一下,单片机的编程和纯软件的编程,除了编程思想和大部分语法可以沿用之外,其他的,寄存器配置和部分语法都有针对性,要花点时间去学的。学会了51之后,假如有时间可以学一下AVR PIC MSP430 等等其他内核的单片机或者功能更强大的51核单片机,宏晶,笙泉等等,作为一种提高的练习。

03
ARM、DSP等主控难吗? 

ARM 、DSP等,其实也属于单片机一类,只不过它的内核牛X一点而已,两种东西我都搞过,用了一段时间,但是,假如你就单单让他作为一种普通的单片机来用,那说明你不会用。

首先说ARM芯片吧,它的内核就是ARM内核,它的主频高很多,普通的都有几百M。CPU缓存大,分有很多级的流水处理线,这样大大提高了CPU利用率。这种IC的资源足以让一个嵌入式操作系统正常跑起来,WINCE, LINUX, UCOS 等等,一个操作系统移植到里面去,跑起来,然后就自己利用操作系统的接口写一些应用软件,就可以直接控制其强大的外设了。当然了,这中间还有另外一种工程师在工作,就是嵌入式驱动工程师,他是专门针对硬件接口写驱动的,封出来的接口就给上层的人使用,这种工作有点类似搞单片机的。很多人想从搞软件直接搞ARM,那么我的建议的是,除非你能力很强大,可以直接搞ARM,否则的话,先学单片机,再学ARM吧。

DSP,中文名叫数字处理器,看它的名字就知道了,它就是用来处理数据的,他的数据处理能力,比ARM强大的多,一般来说接口没有ARM丰富,它的接口都是有针对性的,快速的存储,快速的访问,这都是为了快速的处理数据而作准备的。它的主频也是几百M,DMA就肯定有的了。一般来说,图片处理,视频处理,网络数据处理等等多是用DSP的。就是因为它是用来做数据处理,那么精通DSP的人,一定要精通各种数据处理的算法,什么傅里叶等等,假如你将DSP看做一款MCU来搞,那太浪费了,100块的东西当几块钱的来用。要用好它,物尽其用,那真的很难,要精通算法才行。

04
嵌入式软件是什么东东?  

嵌入式软件分为嵌入式操作系统软件,嵌入式应用软件。大部分的嵌入式软件都寄宿在ARM内核的芯片上,三星,飞利浦等等都有ARM内核的IC,做计算机软件的人,很容易的就转做嵌入式软件,但是要做嵌入式驱动软件的话,就有点难了,因为这个涉及到硬件接口,一般都是搞单片机的人转过去做的。这几年,这个东西很火,用在数码产品,比如MID,掌上电脑等,我在凌阳的时候,刚毕业进来的应届毕业生都懂linux了,那个压力啊,哈哈,是学校专门开课的,可想而知,想逃避竞争的人,不用想了。

嵌入式一直冠以高门槛的名号,相较于软件开发逊色的起步薪资也被网友调侃“饿肚子”。热情投入嵌入式的人比比皆是,无可奈何转入产品经理或技术型销售的也比肩继踵。嵌入式工程师到底有没有前途?

的确,由于嵌入式代码量相对纯软导致起步工资低,但行业大牛的工资也非常可观。另外以长远目光来看,嵌入式渗透消费电子、安全安防、汽车电子、医疗电子、电信等等各个行业的计算机领域,而每年也约有40万的人才缺口。今年机器学习(ML)话题大热,Arm也推出神经网络机器学习软件 Arm NN,可在基于Arm的高能效平台上轻松构建和运行机器学习应用程序,未来嵌入式行业也将不断革新,嵌入式市场有所可期。

据知乎某15年从业人员看,对于嵌入式不必悲观,也切莫盲目乐观,不同时期不同人对前途的定义是不同的。他表示,影响前途发展的因素包括平台、人脉、目标与机遇,有了更多的项目经验才有立足的机会,有广阔的人脉关键时刻才会有人拉一把,有了目标才能专注一个方向不断发展。另外,他还表示,切莫钻技术“牛角尖”,管理岗能爬就爬,错过机会,错过年龄,追悔莫及也无济于事。

还有网友表示,世上不只平均收入排名第一的行业从业人员可以高质量的生活,排名第二、第三、第四等等从业人员都有高质量的生活,而在排名榜单上光鲜亮丽的从业人员也未必过得大红大紫。任何行业都与机遇、环境都有关,再好的行业也有混不下去的人,再差的行业也有人闷声赚大钱。另外,时间在变,世事也在变,前几年大热的公务员,现在也逐渐被人嫌弃。所以在浓厚的兴趣使然下,才有可能成功。

另外,嵌入式这个鱼塘也有搅浑水般的存在,嵌入式ARM也曾经发布过《不是嵌入式坑了你,而是你坑了嵌入式》一文(https://mp.weixin.qq.com/s/Xh1ks1mlQtSM29v7y2MvIg)。据了解,某知乎er最近面试的十几个平均工作年龄超三年的硬件工程师,居然搞不清楚三级管mos管,甚至连三个脚的名字都可以搞错,高低电平这种基础知识也搞不清楚,令人意外的是,这种水平的人开口要价也基本10K+。高的并不是门槛,高的是可以踏踏实实干好这一件事。

什么是前途?个人兴趣+努力程度+把握机会=前途。如果单纯为了吃饱饭,完全没必要去学什么嵌入式,嵌入式培训入学门槛高、学费贵,赤裸裸的歧视本科以下学历,歧视文科,培训出来就业虽然年薪10万起,但是没基础没兴趣学得会吗?如果为了吃饱饭,大千世界何其多的机会,何必折腾?

据贴吧某位大神分享,进入嵌入式的人形形色色,在此前有计算机专业的、有电子类专业的、有硬件工程师、有些甚至完全不相关,基础也千差万别。技术之路的终点也千差万别,有的最后走上了管理,有些转行做了产品经理,有的最后成了技术流的销售,还有极少数的人成了真正的技术专家。而嵌入式工程师的的终点只有一个,就是真正的技术专家。

嵌入式技术大体上可分为编程语言,内核技术,操作系统,总线接口,系统集成。其实细心的可以发现,在 CSDN的论坛分区上就已经体现了,除了系统集成只是在嵌入式系统大区里面体现了下,其他的都有明确的板块对应关系。但是学习之路并非如此学习,而是分为几个层次,据该工程师多年对业内的观察,将嵌入式工程师的技术范围分成下面几个等级:

1.初级:8051或其他单片机,UCOS,I2C,SPI,UART。汇编和C能力一般,系统集成能力弱。

2.中级:在初级的基础上,ARM/MIPS,其他一些RTOS并了解Linux,SDIO,USB。汇编和C能力不错,有一定系统集成能力。

3.高级:主要是对中级的进阶,这一个层面已经不在于掌握具体的技术,而是掌握当前流行技术中的基本思想和构成方式,所以任何流行的技术,对于这一阶段来说,都是手到擒来的。而由于掌握了所有技术的原理,系统集成能力也是超强。

对于初级和中级,都有明确的标杆,在此阶段,工程师还是在入行阶段,评判标准往往是掌握了什么技术,而学技术的最高境界是需要掌握了技术的构成和模式。拿个很简单的例子来说,所有的接口技术,其实都可以归纳为几个要点,单工还是双工、如何发起传输、如何应答、如何报错、如何纠错、如何在其基本传输之上建立高级的应用。只要掌握这些,接口技术便不攻自破。

最近业内普遍流行在某个平台上编程而忽视深入的技术研究。Android也好,MTK的Tune Key也好,你只是在别人的指挥下舞蹈,而技术并没有任何提升,提升只是更好的掌握了这个平台,5年后呢?平台退出市场了,掌握的这些还有什么用处么?学技术,要扎实,要从低至上。很多人一入门,首先想的就是,专注搞Linux和ARM应用处理器。在此之前,Linux里面进程调度了解吗?这不是“回字有几种写法”的问题,而是皮毛和骨骼的关系。按照技术的发展,完全应该先从UCOS之类的RTOS学起,然后慢慢学到Linux,会发现,Linux的最基本的东西,如系统调度,信号量,事件等,是和UCOS的原理类似的。而如果你一开始学习Linux,学到的只是如何在Linux平台上完成你的事情。

最后说点实际的,现在Linux和Andriod是很吃香,也有很多人建议一开始就学习这些热门技术,这样能挣钱。没错,开始的时候可以速成,但如果从长远来看,薪水也永远只是在工程师的主流薪上波动,想要成为技术大牛,年薪百万,永远不可能。技术需要从基础做起,一步一个脚印,成为顶尖,没个三五年,难。不过能够坚持下来的,必成大器。

学习嵌入式需要涉及哪些工作?

据21IC论坛分享,分为四类工作:

1.  系统设计工作

在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。

2.    硬件设计工作

系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。

3.驱动程序和操作系统移植工作

现代嵌入式系统的开发同传统8位单片机系统的开发相比,一个显著的区别就是嵌入式操作系统的广泛使用。在拿到焊接完毕的电路板,并进行基本的测试后,就要进行驱动程序和操作系统的移植工作了。首先要进行的Bootloader的编写和移植工作。Bootloader相当于PC系统的BIOS。对于有些嵌入式操作系统,如uc/OSII没有bootloader同样可以开发调试。但是对于WindowsCE和嵌入式linux系统而言Bootloader就是必须的了。

4.应用程序的开发

嵌入式系统的应用程序开发同在PC 机上开发应用程序的区别不是很大。对于Windows CE系统而言,Microsoft已经提供了较为完善的开发工具。开发人员可以使用Windows 的C# 语言直接在PC上进行应用程序的开发和模拟调试,也可将目标系统同PC 机相连,进行联机调试。现在有很多系统支持J2ME(JAVA的嵌入式系统版本) ,这使得JAVA 在嵌入式系统应用开发中占有较大的优势。另外,作为专业的嵌入式系统软件开发人员,还需要充分了解面向对象技术和设计模式等方面的知识,当然作为初学者可以先不深入研究这方面的内容。同学们在学习嵌入式的过程中要不断进行知识的探索,在一步一步学习之后就会有一个很大的进步。
 

05
谈谈PCB 

搞电子的人,不管你面对但是MCU,ARM, DSP,甚至是其他杂交变异品种,有一种东西是离不开的,那就是电路板。所以的元器件要发挥作用,都得焊在一个适当的电路板上面。PROTEL99 或者 PADS 或者DXP,这些都差不多,越后来出的,功能越强大,画一些复杂的,比如嵌入式领域的板,一般都用功能强大的画板软件。还是那句话,画PCB图不难,但是要精就不简单了,这里涉及到电路原理图的设计问题和很多布线的原则,走线大小,间距,角度等等,一般的mcu控制板,对这些都不是很敏感的。但是电源板,高频的,或者rf无线收发的板就对这种东西很注重了,干扰和抗干扰都要考虑到,滤波电容什么地方放,多大啊,什么的,都要注意。在大功率领域,线宽也比较讲究,大电流的时候,铜皮不够大,或者不够厚,会发热,很容易导致板烧毁,甚至元器件爆炸。还有很多很多注意的,这个又属于专门一个纯硬件领域,要自己多多学习相关知识,平时也要多练习才行的。

一口气说了一大堆,总结一下:搞电子,要先打好模电数电基础,在学编程语言,然后就开始动手,再动手。数电模电好比基石,编程就是砖头,永远都需要你这个建筑师傅来砌才行的。最后,说明一点,技术是个无底洞,我也只不过茫茫技术海洋的一滴无名小水珠。全部观点和经验都是我自己的总结,不能说完全对,只能说,我是这样过来的。

06

嵌入式发展前景与当今状况


目前的嵌入式开发更倾向于智能化,也就是我们所说的智能硬件(硬件+软件),从现在各种前沿的嵌入式产品来看的确如此,嵌入式产品的一个发展趋势是更倾向与自动化控制和人机交互,而不是强调“算法”这一块。

要区分你仅仅是一名嵌入式工程师而不是算法工程师,什么一大堆“人工智能”、“阿尔法狗”、“深度学习”、“神经网络”都不需要深入理解,那是研究生、博士生做的。

笔者并不是说你的能力不足,而是“术业有专攻”,这并不是一名嵌入式工程师的工作量,你需要做的仅仅是与他们的“云端大脑”进行对接,调用他们API就完事了。

由于人工智能、深度学习、神经网络、区块链、大数据等先进学科的崛起,很多人都产生质疑:“嵌入式还有发展前景吗”?

这个问题我在这里可以很肯定地告诉你:“嵌入式有很好的发展前景,前沿嵌入式技术即将崛起,或者说已经崛起”。

的确,人工智能、大数据这些学科会给嵌入式带来冲击,就目前来看,大学生更倾向与python编程语言、机器学习这一块,而嵌入式学者的确比往年有所下降。

但学者少了并不代表他的需求就少了,并不代表他的薪资水平下降了,目前的一个嵌入式技术更倾向于与智能学科相结合的趋势。

以百度机器人为例,机器人的核心是大脑,即是“数据和算法”,但机器人大脑想机器人身躯能够像人类一样活动,能说会道,行走自如,那么就必须得依靠嵌入式技术。

这就是我所说的嵌入式+智能学科应用,从长久来看,嵌入式只会越来越火,智能学科的崛起必定带动新型的嵌入式技术发展。

 

07

嵌入式开发技能大全

合格的嵌入式开发者应是多面手,应具备各方面的技能,包括从硬件到软件到应用(电力系统保护,自动化,控制,人工智能,机器学习等),从单板到系统整机,从技术到管理,甚至吹拉弹唱也需要了解一点,做项目管理时可以提升团队气氛和丰富业余生活。

嵌入式知识和技能体系庞大,样样精通者凤毛鳞角,一般都是一专多能,各类技能多少都能说上一点。按照嵌入式开发层次关系,整理嵌入式开发者技能大全如下。

1、处理器

MCU架构及开发。MCU,俗称单片机,把中央处理器(CentralProcess Unit,CPU)的频率和规格作适当删减,并将内存(Memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD等驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同的组合控制。常见的MCU包括Intel的C51/C8051F系列,Motorola的68K系列,MicroChip的PIC系列等。

MPU架构及开发。MPC指微处理单元,一般不带外围器件(如存储器阵列等),是高度集成的通用结构的处理器。典型如Intel的X86系列、飞思卡尔的PowerPC系列、P1系列,ARM架构处理器等。

DSP架构及开发。DSP采用哈佛结构,同一个时钟周期内可以多次访问存储器,多级指令执行流水结构提高了系统的执行效率,DSP芯片常用于复杂的运算,典型如TI的TMS CXX系列,ADI的SHARC系列、Blackfin系列等。

2、CPLD&FPGA架构及开发

CPLD&FPGA作为专用集成电路(ASIC)领域中的一种半定制电路而出现,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。通过可编程逻辑单元实现各种算法和组合逻辑。

基于CPLD&FPGA实现程序开发。包括RTL门级逻辑图设计,VerilogHDL程序设计,VHDL程序设计,XILINX编译软件使用,ALTERA编译软件使用,低速串、并行通信控制器设计,高速串行通信控制器设计。

3、电路设计和分析

包括模拟电路和数字电路设计,包括器件DataSheet阅读,原理图及PCB阅读等。

4、原理图/PCB设计工具

Cadence,Altium,PADS,DXP等。

5、电路仿真工具使用

Multisim,Pspice,ADS,MATLAB等。

6、分立类电子元器件工作原理和选型

电路防护类器件,阻容器件,电感磁珠,DC/DC,晶振,二极管,三极管,稳压管,光耦,MOS管,IGBT,继电器,开关和按键,LED指示灯,PCB板用接线端子,交流互感器等。

7、集成类电子元器件工作原理和选型

AD,逻辑器件,DA,运放,计数器,触发器,锁存器,译码器,SRAM,SDRAM,DDR,FLASH,EEPROM,接口芯片等。

8、失效分析与可靠性

物料的构造与工作原理,金相切片,显微观察,PCB形变测量,HALT实验技术,可靠性计算等。

9、硬件测试(器件、模件、整机)

元器件测试方法,模件、整机测试方法,元器件、模件、整机测试问题分析,国标、行标理解,EMC问题分析和解决等。

10、操作系统架构及开发环境

了解操作系统原理及基本编译原理。操作系统提供CPU资源管理、外设驱动、内存管理、线程/进程管理、文件系统、网络通讯、安全机制、界面管理等。嵌入式实时操作系统的基本特征是事件响应的快速性和确定性,在嵌入式系统中广泛应用。

通用操作系统包括windows、Unix、LInux等。目前在嵌入式领域广泛使用的操作系统包括:嵌入式实时操作系统µC/OS-II、嵌入式Linux、WindowsEmbedded、VxWorks、FreeRTOS、QNX等,以及应用在智能手机和平板电脑的Android、iOS等。

11、底层驱动开发

VxWorks操作系统驱动开发,Linux移植,Linux开发,单板DTS配置以及根文件系统生成(Buildroot),U-BOOT移植和开发,C语言开发,Python语言开发,Makefile编写,GNU编译器及工具链的使用,Linux操作系统使用。

具体包括以太网驱动,SPI驱动,I2C驱动,文件系统驱动,CAN驱动等。

12、系统软件设计

面向对象,设计模式,UML,嵌入式多任务开发,重构,多核开发等。了解常用的开发过程,如敏捷编程,测试驱动开发等。

13、系统软件开发

熟悉开发语言,包括:C,C++,C#,QT,Python,JAVA,等。熟悉WEB 开发,开发规范等。

14、数据结构与算法

常用数据结构和算法,图论算法,数字信号处理算法,小波算法等。

15、网络与通信

计算机网络原理,TCP/IP协议原理及分析,IEC61850规约(建模,MMS,SV,GOOSE等),103规约,104规约,DNP规约,Modbus协议,物联网Zigbee协议,bluetooth,wireshark等报文分析工具,环网HSR协议,网络安全等。

16、数据库

数据库原理与设计,SQLite/Access/MySQL/SQLServer/Oracle/大数据hadoop等。

17、界面和图形库

Zinc,UGL,QT,SVG,MiniGUI等。

18、应用知识(以电力系统自动化为例)

电力系统常识,继电保护知识,测控知识;智能变电站网络架构,网分,故障录波器,保信,远动等。

19、调试和测试

软件测试基础,61850规约测试,网络测试,时间管理测试,应用功能测试(继电保护功能等),ATS测试开发与使用,Labview测试程序开发等。

20、项目管理

配置管理如版本管理工具Git使用等,项目计划与任务划分,项目进度跟踪,项目协调等。

08
2020 年,嵌入式开发工程师的两大必知必会

一、编程语言

当我们谈及编写围绕硬件层运行的代码时,最常提起的就是C语言。25年前,当我们从汇编语言过渡到C语言时,整个过程非常缓慢,且需求很高。如果你想进入嵌入式编程领域,那么2020年C以及C++仍然是你应该重点学习的编程语言。

如果你想尝试嵌入式编程,那么可以从下面几个方面着手:

  • https://www.learn-c.org/

Learn-c.org 是 Ron Reiter 的私人项目。虽然这个项目与嵌入式或硬件的关系不大,但作为C语言入门还是很不错的。

  • 买个微处理器

就我个人而言,实际操作才是最佳的学习途径。所以,你也可以买一个微处理器,实际接触硬件,亲眼看到实际结果才是你最应该做的事情。你可以购买 Arduino 等流行的处理器,然后从一个小项目开始,真正了解硬件的工作原理。

  • 阅读书籍和文档

阅读书籍和文档是最关键的学习方式。你可以根据自己选择的方向(嵌入式系统、固件开发、驱动程序开发等),选择相应的书籍。

除了C/C++之外,该领域没有真正占据实际市场份额的编程语言,但是下面的新起之秀值得关注。

Rust

今年我一定要把学习 Rust 提上日程。有传言说 Rust 是从C发展而来的,Rust 将在很多应用领域广泛取代C。Rust 在嵌入式领域的发展非常迅速。如果我们比较 StackOverflow 网站上有关C、Rust 和 Assembly 的提问,就可以看到2019年有关 Rust 的问题数超过了 Assembly,而C在过去几年中略有下降。

相对于C,Rust 有几大优势,最大的优势之一就在于内存的安全性。Medium 网站上有很多关于 Rust 的文章,你可以通过阅读了解 Rust 的所有优势。此外,Rust 可以在许多微控制器上运行,这个 GitHub 代码库中汇总了大量信息(https://github.com/rust-embedded/awesome-embedded-rust)。

如果你想学习 Rust,那么我强烈建议你访问 Rust 主页(https://www.rust-lang.org/)。这个网站提供了大量的入门文档和教程。还有这本书《The Rust Programming Language》也是很好的起点。Rust 网站专门提供了有关嵌入式的说明(https://www.rust-lang.org/what/embedded),可以帮助你了解嵌入式设备上的 Rust 编程。

Golang

Golang?Golang!Golang 这种编程语言的潜力也超过了你的想象。目前,它主要运行在用户空间,可以替代 Ruby 等后端语言,或用作用户空间的应用程序,因为它拥有良好的多处理器支持。

不过,我相信 Golang 会慢慢进入底层的编程。目前,它已应用在固件开发中,用于开发引导程序。随着嵌入式设备上的 RAM、ROM 和 Flash 的容量不断增大,将来也有可能在嵌入式设备上运行 Golang。 对于每位嵌入式系统程序员来说,Golang 绝对值得一试,而希望参与固件开发的人则必须学习 Golang。

二、硬件

除了编程语言之外,硬件设计方面也有一些有趣的趋势。我想提及的第一件事情是:RISC-V。


RISC-V


RISC-V 是一种开源硬件指令集体系结构。它基于精简指令集计算机原理,即所谓的 RISC。与 Arm 相比,制造商不需要支付许可费用即可使用 RISC-V。
 

面向服务器和消费者的硬件大多采用了x86硬件。我认为 RISC-V 不会很快在这部分市场中赢得份额,但是它有可能应用于其他几个市场。路由器和交换机等嵌入式设备以及智能手机制造商或物联网设备都可能切换到 RISC-V 架构。
 

现在市场已有 RISC-V 的电路板,虽然价格仍然偏高,但值得关注。例如,眼前我的办公桌上的这块就是 SiFive HiFive Board。
 

big.LITTLE
 

最后我想谈谈 big.LITTLE 架构。最初它是由 ARM 发明的。原理是将低功耗的处理器(LITTLE)与功能强大、高功耗的(big)处理器相结合。同一时间内, LITTLE 或 big 只有一侧处于活动状态。这种架构应该能够更好地适应当今的动态计算需求。
 

这并不是一个新想法,ARM 于2011年就提出了此项建议。但是似乎其他制造商也对 big.LITTLE 跃跃欲试。英特尔于2019年预览的英特尔 Lakefield 异构处理器就采用了 big.LITTLE 架构。

发布了189 篇原创文章 · 获赞 86 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/aa120515692/article/details/104817640