01
嵌入式系统的概念 着重理解“嵌入”的概念
主要从三个方面上来理解:
1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部。
比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能。
一切芯片要造外部桥路来扩展实现,像串口之类的都是靠外部的16C550/2的串口控制器芯片实现。
而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。
比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个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年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科
02
嵌入式系统的分层与专业的分类
嵌入式的定义很模糊,尤其是这几年发展出众多的应用形式,让人摸不着头脑。对于想进入这个地方的新人,有种望而却步的感觉。
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础。
一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。
硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。
2、驱动层,这部分比较难。
驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到。
这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。
想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。
驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。
3、操作系统层
对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。
操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。
4、应用层,相对来讲较为容易的。
如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及Jave方面的编程也是如此的。
嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。
03
嵌入式领域分工的变化
著名嵌入式专家火哥曾经说过,有很多所谓有经验的人认为,嵌入式底层软件和硬件技术是不怎么变化的,经验越多越值钱,越老越吃香。其实这是一种主观机械而又狭隘的经验主义,缺乏全局视野,只看到自己所在领域的一些基础性技术,看不到整个行业和相关学科领域的变化,一叶障目。
其实就拿现代足球和篮球运动作为类比,也是同样的道理。现代足球和篮球的发展历史比什么嵌入式软件,硬件等高科技的发展史还要长久,那种机械经验主义狭隘的观点肯定会认为,打篮球就是学运球,突破,传球,投篮,踢足球就是学传球,停球,带球,铲球,射门,跑位,这都是50年前甚至100年前就有的东西,和现在一样是不变的。然后他们没有看到的是,篮球和足球的战术和位置分工,每隔5-10年就会发生很大的变化。
比如篮球领域从之前的强内线,肌肉棒子的中锋时代演变成小球三分射手时代,内线球员对中远投和三分球能力要求越来越高,以前那种没有射程的大个内线越来越不吃香。
足球领域的分工和战术变化就更多了,从远古一点巴西群星的424 WM阵型个人技术流到意大利链式防守,从经典442阵型,双前锋一高一快或者双高的英式长传冲吊,到第一代433全攻全守的踢法。从4231传统的边锋加经典10号位前腰和扫荡防守型后腰再到西班牙式Tiki-Taka传控足球短传渗透的盛行,再到现在高位逼抢,经典前腰和防守型后腰的消失,全能型B2B中场的吃香。其它位置的球员,例如,逆足边锋内切踢法,伪9号无锋阵,边后卫对助攻能力要求越来越高,而不只是防守对方边锋,中后卫对出球能力要求越高,不只是会防守抢断。而过去那些有了很多成绩和荣誉但是位置单一,不符合现代高位逼抢,灵活换位要求的球员,越来越没有市场。
像现代足球,篮球这种发展了50年到100年的体育运动,看似不变,实际上都经历了如此多的战术和位置分工变化,不同时代对不同位置球员的要求都不一样,更何况近二三十年经历了高速发展的电子信息和嵌入式技术呢?回到正题,分析一下硬件工程师和嵌入式软件工程师的分工和技能要求变迁。