嵌入式系统是软硬件结合的产物,因此,从事嵌入式开发的人有两类。
一类是学电子工程、通信工程等偏硬件专业的,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持操作系统)、最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。
另一类是学软件、计算机专业的,主要从事嵌入式操作系统和应用软件的开发。如果学软件的人对硬件原理和接口有较好的掌握,他们完全也能写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了。嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作。目前国内很多嵌入式系统公司都将稍复杂的硬件设计外包给我国台湾或国外公司设计,自己只负责开发软件,因为嵌入式产品的差异很大程度在软件上。因为越是智能设备,越是复杂系统,软件起的作用越关键,这是趋势。
因此,未来嵌入式开发人员的知识结构应该包括:
1.嵌入式微处理器结构与应用
这是嵌入式硬件基础课程,以取代传统的“微机原理与接口”课程(目前国内已有少部分高校IT专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。嵌入式是软硬件结合的技术,搞嵌入式软件的人应充分了解ARM处理器工作原理和接口技术,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作?怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率)?怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器。将来想从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书,你必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件?
有些学员觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,必须在嵌入式实验室做了一些实验后才会觉得它看得见摸得着。还有的人对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。其实不应仅将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理。一个不熟悉汇编语言的人,怎么能为该处理器写出最优的C语言代码呢?在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前主要还要靠汇编程序。当你在一个嵌入式公司工作,查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人员可能就无法交流。
英特尔早期生产低端ARM(Strong ARM,相当于ARM 7),现在转向生产高端ARM(即Intel Xscale处理器,相当于ARM 10,主要用在高端PDA上,如惠普和戴尔生产的PDA都采用Intel Xscale)。目前应用最多的是ARM 7和ARM 9两类处理器。ARM 7较便宜,可运行uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统)、Vxworks、ucOS/II等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,不能使用虚拟内存),所以不能运行WinCE,另外通用Linux中的某些内存管理功能也不能用在ARM 7上。ARM 9是一个带MMU功能的高端处理器,可运行WinCE或通用Linux的大多数功能。现在一般高校正在建设的嵌入式实验室大多包括ARM 7系统(采用Samsung S3C44b0x开发板,主要用于嵌入式处理器结构、嵌入式Linux课程实验)和ARM 9系统(采用Samsung S3C2410x开发板,主要用于WinCE课程建设),每套实验板都配了高速仿真器。
2.嵌入式操作系统
除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也被称为实时操作系统(Real TimeOperating System,简称RTOS)。从事嵌入式的人必须至少掌握一种嵌入式操作系统(当然掌握两种更好),这在嵌入式的所有技术中是最为关键的。目前最重要的RTOS主要包括:
传统的经典RTOS:最主要的便是Vxworks操作系统,以及Tornado开发平台。Vxworks因出现稍早,实时性很强(可在1ms内响应外部事件请求),并且内核可极微(最小8K),可靠性较高,所以在北美,Vxworks占据了嵌入式系统的半壁江山。特别是在通信设备等实时性要求较高的系统中,RTOS几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。贝尔-阿尔卡特、朗讯、华为等通信企业在开发产品时,大都会选用Vxworks。但因为Vxworks价格很高,所以一些小公司或小产品往往用不起它。目前很多公司都在往嵌入式Linux转(比如华为)。但无论如何,Vxworks的地位在很长一段时间内仍是不可动摇的。与Vxworks类似的稍有名的RTOS还有pSOS、QNX、Nucleus等。
嵌入式Linux操作系统:Linux除可以作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、拥护者众。这样嵌入式产品成本会很低。Linux本身不是一个为嵌入式设计的操作系统,它不是微内核的,并且实时性不强。目前应用在嵌入式领域的Linux系统主要有两类:一类是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),它占据了较大的应用份额,可在ARM7上运行;另一类是运行在ARM 9上的,一般是将Linux 2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更能在ARM 9上跑)。很多人预测,嵌入式Linux将占嵌入式操作系统的50%以上份额。缺点是熟悉Linux的人太少,开发难度稍大。 另外,目前我们发现很多教材以及很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理。但由于ucOS/II功能有限,实用性略为逊色。熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮助,可谓一举多得。据悉,目前英特尔、飞利浦都在搞ARM+Linux的嵌入式开发,富士通则是在自己的处理器上进行Linux开发。
目前在嵌入式Linux领域,三类人才很稀缺: 能将Linux移植到某个新型号的开发版上的人 能写Linux驱动程序的人 以及熟悉Linux内核裁减和优化的。
WinCE还有两个特殊版本,一个是MS PocketPC操作系统,它专用于PDA(掌上电脑)上,另一个是MS SmartPhone操作系统,用于智能手机上(带PDA功能的手机)。两者也都属于WinCE平台。在PDA和手机市场上,除WinCE外,著名的PDA嵌入式操作系统还有Palm OS、Symbian等。在WinCE的强劲冲击下,Palm和Symbian还能有多大生命力?有些高校开设专门的“Windows CE嵌入式操作系统”课程,主要是基于以下原因:本身已开设了Windows程序设计课程,同学学过VC++后再学WinCE,非常方便自然,通过学习WinCE同样也可了解嵌入式软件的一般开发过程。很显然,嵌入式Linux永远不可能替代WinCE,而且将来谁能占据更大份额,还很难讲。毕竟很多人更愿意接受MS的平台,就像各国政府都在大力推广Linux应用,而且已持续很长时间,但如今真正在PC机上使用Linux的用户并没有占太大的比例。目前,在嵌入式平台上,Linux是叫得最响的操作系统,但其实还是WinCE实际应用得更多。
总之,在选择使用哪类嵌入式操作系统的问题上,你要根据自己的能力和期望来具体情况具体分析。若你觉得自己功底较深且能钻研下去,则可去学嵌入式Linux;若你觉得自己VC++功底较好,且希望短平快地学习嵌入式开发,则WinCE是最好的选择。
3.嵌入式开发的其他相关软件技术
搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域包括:
数字图像压缩技术:这是嵌入式最重要、最热门的应用领域之一,主要应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。
通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或Internet,所以必须要掌握TCP/IP协议及其编程,这些都是基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也很重要。无线通信协议包括无线局域网通信协议802.11系列、Bluetooth(蓝牙),以及移动通信(如GPRS、GSM、CDMA等)。
网络与信息安全技术:如加密技术、数字证书CA等。
DSP技术:DSP(Digital Signal Process数字信号处理)处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件专业的课程,搞软件的人若能了解一些相关知识就更好了。目前DSP人才较为缺乏。如果你具有信号与系统、数字信号处理等课程的基础,则对于学习MPEG编解码原理有很大帮助。
4.嵌式开发的相关硬件基础
对于软件工程专业的人来说,从事嵌入式软件开发,数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程都是非常重要的。另外,汇编语言、C/C++、数据结构和算法,特别是操作系统等软件基础课也十分重要。学习这些内容的主要目的是为了能看懂硬件工作原理,所以重点还是应放在嵌入式软件,特别是操作系统级软件上。
如果是电子、通信类专业的人,有较好的模拟电路和单片机基础,则学习嵌入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在在一些速度要求较高的场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬件来实现,这就涉及到HDL数字电路设计技术及其FPGA/IP核实现技术。
嵌入式的迷人之处在智能手机上得到了充分体现。比如,兼具MP3、英汉词典、可阅读Word文档等功能的最低档的智能手机,其处理器是ARM,OS是MS Smartphone(即WinCE.NET 4.2),简直可作为学习嵌入式课程的产品案例了。有OS的手机果然了得,金山词霸、Word、Excel、Regedit等居然都有Smartphone版的,PC上的MP3、Doc等文件居然在下载时都可被自动转换成Smartphone格式。完全可用WinCE开发的一些程序将文件下载到自己的手机上。如今,PDA智能手机越来越火爆,而国产的ARM+Linux手机价格也仅为1200元左右。
总之,学习嵌入式研发设计,要么走ARM+WinCE的路,要么走ARM+Linux的路,要么走ARM+VXWORKS的路。每个从事嵌入式系统的人都可选择其中的一条路,条条大路通罗马 |