十年经验教你如何学习嵌入式系统(基于ARM平台)
1、嵌入式系统的概念
着重理解“嵌入”的概念 前端
主要从三个方面上来理解。
1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,好比早期基于X86体系结构下的计算机,CPU只是有运算器和累面试
加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串算法
口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就至关于显卡。比较数据库
高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);编程
还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址, 可用于网关交换用,而另一个NPE网络处理器引擎支持DSL,只windows
要外面再加个PHY芯片便可以实现DSL上网功能。IXP系列最高主频能够达到 1.8G,支持2G内存,1G×10或10G×1的以太网口或网络
Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由 intel进行整合后成Xscale内核的最高的处理器了。
2、从软件上前,就是在定制操做系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操做系统内核时所选择数据结构
的应用程序组 件就是完成了软件的“嵌入”,好比WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选架构
择,若是咱们选择 了,在CE启动后,就能够在界面中找到这些东西,若是是之前PC上将的windows操做系统,多半的东西都须要函数
咱们得新再装。
3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。
以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有不少,但在这个领域范围内,谁都不
敢说本身的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科
2、嵌入式系统的分层与专业的分类。
嵌入式系统分为4层,硬件层、驱动层、操做系统层和应用层。
1、硬件层,是整个嵌入式系统的根本,若是如今单片机及接口这块很熟悉,而且能用C和汇编语言来编程的话,从嵌入式系统的
硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要可以看懂硬件的电路图和自行完成CPLD的逻辑设
计的,同时还要对操做系统内核及其调度性至关的熟悉的。但硬件平台是基础,增值还要靠软件。
硬件层比较适合于,电子、通讯、自动化、机电一体、信息工程类专业的人来搞,须要掌握的专业基础知识有,单片机原理
及接口技术、微机原理及接口技术、C语言。
2、 驱动层,这部分比较难,驱动工程师不只要能看懂电路图还要能对操做系统内核十分的精通,以便其所写的驱动程序在
系统调用时,不会独占操做系统时间片,而导 至其它任务不能动行,不懂操做系统内核架构和实时调度性,没有良好的驱动编写
风格,按大多数书上所说添加的驱动的方式,不少人都能作到,但可能连个初级的 驱动工程师的水平都达不到,这样所写的驱动
在应用调用时就如同windows下咱们打开一个程序运行后,再打开一个程序时,要不就是中断之前的程序,要不 就是等上一会才
能运行后来打开的程序。想作个好的驱动人员没有3、四年功底,操做系统内核不研究上几编,不是太容易成功的,但其工资在
嵌入式系统四层中可 是最高的。
驱动层比较适合于电子、通讯、自动化、机电一体、信息工程类专业尤为是计算机偏体系结构类专业的人来搞,除硬件层所
具有的基础学科外,还要对数据结构与算法、操做系统原理、编译原理都要十分精通了解。
3、操做系统层,对于操做系统层目前可能只能说是简单的移植,而不多有人来自已写操做系统,或者写出缺胳膊少腿的操做
系统来,这部分工做大都由驱动工程师来完成。操做系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十
分重要。听说,XP操做系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所本身的女娲Hopen操做系统
估计也得花遇几百人年才能搞定。所以这部分工做相对来说没有太大意义。
4、应用层,相对来说较为容易的,若是会在windows下如何进行编程接口函数调用,到操做系统下只是编译和开发环 境有相
应的变化而已。若是涉及Jave方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,没必要归结到嵌入式系
统范畴内。但若是涉及嵌 入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(好比基
于SIP、H.323、Astrisk)方面又较为复杂, 而且有难度了。
3、目标与定位。
先有目标,再去定位。
学 ARM,从硬件上讲,一方面就是学习接口电路设计,另外一方面就是学习汇编和C语言的板级编程。若是从软件上讲,就是
要学习基于ARM处理器的操做系统层面 的驱动、移植了。这些对于初学都来讲必须明确,要么从硬件着手开始学,要么从操做系统
的熟悉到应用开始学,但无论学什么,只要不是纯的操做系统级以上基于 API的应用层的编程,硬件的寄存器类的东西仍是要能
看懂的,基于板级的汇编和C编程仍是要会的。所以针对于嵌入式系统的硬件层和驱动程的人,ARM的接 口电路设计、ARM的C语言
和汇编语言编程及调试开发环境仍是须要掌握的。
所以对于初学者必然要把握住方向,本身的目标是什么,本身要在那一层面上走。而后再着手学习较好,与ARM相关的嵌入
式系统的较为实际的两个层面硬件层和驱动层,无论学好了那一层都会颇有前途的。
若是想从嵌入式系统的应用层面的走的话,可能与ARM及其它体系相去较远,要着重研究基嵌入式操做系统的环境应用与相
应开发工具链,好比WinCe操做系统下的EVC应用开发(与windows下的VC相相似),若是想再有突破就往某些音视频类的协议上靠
,好比VOIP领域的基于SIP或H.323协议的应用层开发,或是基于嵌入式网络数据库的开发等等。
对 于初学者来说,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特色,嵌入式系统四个层面上那个
层面上来说都是有高人存在,固然高人也对应 的高工资,我是作硬件层的,之前每个月工资中我的所得税要被扣上近3千大元,当
然我一方面充当工程师的角色,一方面充当主管及人物的角色,两个职位我一我的 干,但上班时间就那些。硬件这方面上可能与
我PK的人不多了,才让我拿到那么多的工资。
4、开发系统选择。
很 多ARM初学者都但愿有一套本身能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,
就象不少人认为ARM9与ARM7好, 我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看本身往嵌入式系统的那
个方向上走,是作驱动开发仍是应用,仍是作嵌入式系统硬件层设计 与板级测试。若是想从操做系统层面或应用层面上走,无论
是驱动仍是应用,那固然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年 或是一年二年能搞定的
事。
在某种意义上请,ARM7与9的差异就是在某些功能指令集上丰富了些,主频提升一些而已,就好比286和386。对于用户来说
可能觉查不到什么,只能是感受速度有些快而已。
ARM7比较适合于那些想从硬件层面上走的人,由于ARM7系列处理器内部带MMU的不多,并且比较好控制,就好比S3C44B0来说,可
以很容易将 Cache关了,并且内部接口寄存器很容易看明白,各类接口对于用硬件程序控制或AXD单步命令行指令均可以控制起来
,基于51单片机的思想很容易能把他 搞懂,就当成个32位的单片机,从而消除不少51工程师想转为嵌入式系统硬件ARM开发工程
师的困惑,从而不会被业界某此不是真正懂嵌入式烂公司带到操做 系统层面上去,让他们望而失畏,让业界更加缺乏这方面的人
才。
而嵌入式系统无论硬件设计仍是软件驱动方面都是十分注重接口这部分的,选择平台还要考察一个处理器的外部资源,你接
触外部资源越多,越熟悉他们那你之后就业成功的机率就越高,这就是招聘时 所说的有无“相关技能”,由于一我的不可能在短
短几年内把全部的处理器都接触一遍,而招聘单位所用的处理器就多是咱们彻底没有见过的,就拿台湾数十家小 公司(市价几
千万)的公司生产的ARM类处理器,也很好用,但这些东西通用性太差,用这些处理器的公司就只能招有相关工做经验的人了,那
什么是相关工做经 验,在硬件上讲的是外围接口设计,在软件上讲是操做系统方面相关接口驱动及应用开发经验。我从业近十年
,2000年ARM出现,我一天始作ARM7,而后 直接跑到了Xscale(这个板本在ARM10-11之间),一作就是五年,招人面试都不下数百
人,在这些方面仍是深有体会的。
我我的认为三星的S3C44b0对初学者来讲比较合适,为何这么说哪?由于接口资源比较丰富,技术成熟,资料较多,应该
十分适合于初学者,有问题可能很容易找人帮且解决,由于大多数人都很熟悉,就如同51类的单片机,有N多位专家级的人物能够
给你帮忙,相关问题得以很快解答,所然业界认为这款ARM都作用得烂了,但对于初学者来,就倒是件好事。
所以开发系统的选择,要看本身的将来历来目标方向、要看开发板接口资源、还要看业界的通用性。
5、如何看待培训。
首先说说我本身,我目前从业近十年,与国内嵌入式系统行业共同起步,一直站在嵌入式系统行业前沿,设计过多款高端嵌
入式系统平台产品并为众多公司提供过解决方案,离职前为从事VOIP的美资公司设计IP-PBX,历任项目经理、项目主管、技术总
监、部门经理,积累众多人脉,并集多年经验所得,考虑到学生就业与公司招人的不相匹配,公司想招人招不到,而学生和刚毕
业的工程师想找份工做也不太容易,于此力创知天行科技有限公司,开展嵌入式系统教育培训。
因 一线的科研人员和一线的教师不相接触,导至国内嵌入式人才缺少,国外高校的技术超前于业界公司,而国内状况是业
界公司方面的嵌入式系统技术要远远领先于高 校。为架构业界与高校沟通的桥梁,把先进技能带给高校学子,为学生在就业竞争
中打造一张王牌,并为业界工程师快速提高实现自我创造机遇,我就这样辞去了外 企年薪20多万的职位,作嵌入式系统方面的培
训了。
对于培训来说,是花钱来买时间,不少工程师都喜欢本身学,认为培训不值,这也是有 可能的,纯为赚钱的培训固然不会
太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔账不知他们算过没有,若是一个一周的培训,能带给他们自学两
年 后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样他会省约至少一年半的时间来学其它的或从新站
在另外一个高度上工做,那么他将最迟一 年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一
年,每个月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年 时间,无论是休闲也好,再继续提升也好,总之是跑到了
队伍的前面了。
另外一层面上讲,对于新人的培训至关于他们为本身提早买了份失业保险,有师傅会带领他们入道,我今年暑假时班里最年轻
的一个学生是大二的,今年才上大三,这学期才刚学单片机,但如今ARM方面的编程工做已经搞得有声有色了,再过一年多毕业,
他还会失业吗?
再 者经过培训,你能够知道不少业界不为常人所知的事,同时也为本身找了个师傅,就好比说,两个工程师分别用S3C2410
和PXA255来作手持设备,一样 两人都工做四年,再出去找工做,两人工资可能最多可相差一倍,为何?这就是业界不为常人所
知的规则,2410属于民品,被业界用烂了,作产品时成本特敏 感,固然也对人才成本敏感了,PXA255是intel的东西,一个255
CPU能买三个2410,一直被业界定义为贵族产品,用的公司都是大公司或为 军方服务的公司,不会在意成本,只要把东西作好,
一切都好说,但这方面作的人也少啊,由于开发系统贵啊。
对于说为自已找了个好师傅, 我想是这样的,由于同级工程师间存在着某此潜在的竞争关系,有不少人不肯意把本身知道
的东西教给别人,这意味着他将要失业,就是所说的教会徒弟,饿死师 傅,但对于咱们这些人就不存在这样的关系了,我是在嵌
入式系统平台设计上走到了必定程序,目前在国内这块的技术上已是本身很难再突破本身,所以不少东西 我对你们都是OPEN的
,就好比说下面那部分关于接口设计中所提到的时序接口东西,我要是不讲,却使是高级硬件工程师我想也几乎只有10%的人能知
道 吧。
6、成为高级嵌入式系统硬件工程师要具有的技能。
对于硬件来说有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,通常须要很长的经验积累,单单一个阻值或容值
的精度不够就可能使信号误差很大。所以年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,好比手机的Modem射频模块
,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感受模拟功能不太强的人,不太适合搞这个,若是真能搞定到
手机的射频模块,只要达到通常程度可能月薪都在15K以上。
另外一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类, 国内FPGA的工程师大可能是在IC设计公司
从事IP核的前端验证,这部分不搞到门级,前途不太明朗,即便作个IC前端验证工程师,也要搞上几年才能胜任。 DSP硬件接口
比较定型,若是不向驱动或是算法上靠拢,前途也不会太大。而ARM单片机类的内容就较多,业界产品占用量大,应用人群广,因
此就业空间极 大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互PK,断定水平高低的依据。
而接口设计这块最关键的是看时序,而不是简单 的链接,好比PXA255处理器I2C要求速度在100Kbps,若是把一个I2C外围器件,
最高还达不到100kbps的与它相接,必然要致使设计的失 败。这样的状况有不少,好比51单片机能够在总线接 LCD,但为何这
种LCD就不能挂在ARM的总线上,还有ARM7总线上能够外接个Winband的SD卡控制器,但为何这种控制器接不到ARM9或 是Xscale
处理器上,这些都是问题。所以接口并非一种简单的链接,要看时序,要看参数。 一个优秀的硬件工程师应该可以在没有参考
方案的前提下设计 出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇
到一个工程师把方案中的5V变1.8V的DC芯片, 直接更换成LDO,有时就会把CPU烧上几个。前几天还有人但愿我帮忙把他们之前基
于PXA255平台的手持GPS设备作下程序优化,我问了一下状况,地 图是存在SD卡中的,而SD卡与PXA255的MMC控制器间采用的SPI
接口,所以致使地图读取速度十分的慢,这种状况是设计中严重的缺陷,而不是程序 的问题,所以我提了几条建议,让他们更新
试下再说。所以想成为一个优秀的工程师,须要对系统总体性的把握和对已有电路的理解,换句话说,给你一套电路图你 终究能
看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力
仍是原理图设计PCB绘 制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还能够分出ECAD工程师,就是
专业的画PCB板的工程师,和EMC设计工程师,帮 人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好
的硬件工程师,在电路板调试过程当中能经过自已编写的测试程序对硬件功能进行 验证。而后再交给基于操做系统级的驱动开发人
员。
总之,硬件的内容不少很杂,硬件那方面练成了都会成为一个高手,我时常会给人家作下方案评估,不少高级硬件工程师
设计的东西,常常被我一句话否认,所以工程师作到我这种地步,也会得罪些人,但硬件的确会有不少鲜为人知的东西,让不少
高级硬件工程师也摸不到头脑。
那 么高级硬件件工程师技术技能都要具有那些东西哪,首先要掌握EDA设计的辅助工具类如
ProtelORCADPowperPCBMaplux2ISE、 VDHL语言,要能用到这些工具画图画板作逻辑设计,再有就是接口设计审图能力,再者就是
调试能力,若是能走到整体方案设计这块,那就基本上快成为资深工 程师了。
硬件是要靠经验,也要靠积累的,十年磨一剑,百年磨一针。 把一个月前想写的东西,今天终于用一上午的进间整理完
了,但愿对喜好嵌入式系统开发的工程师和学生们有所帮助。