嵌入式系统开发是对于除了电脑之外的所有电子设备上操作系统的开发,开发对象有手机,
掌上电脑,
机电系统等,一般由
嵌入式微处理器、外围硬件设备、
嵌入式操作系统以及用 户的应用程序等四个部分组成。
应用定义
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的
专用计算机系统。它一般由
嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用 户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能
嵌入式系统一般指非PC系统,它包括硬件和软件两部分。硬件包括
处理器/
微处理器、
存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
基础知识
一、软件方面的知识:
或传统的“微机原理与
接口”课程,嵌入式是软硬件结合的技术,搞嵌入式系统的人应对
ARM处理器工作原理和接口技术有充分了解,包括汇编
指令系统。不了解
处理器原理,就没办法写出驱动程序。在
嵌入式开发的一些关键部分,如Bootloader等,主要靠汇编写程序。
2、嵌入式操作系统类课程:
从事嵌入式系统的人至少须掌握一个嵌入式操作系统(当然越多越好),目前最重要的RTOS主要包括:
(1)、传统的经典RTOS:最主要的是Vxworks操作系统,以及其Tornado开发平台。Vxworks出现早,实时性很强,并且内核可极微,可靠性较高。特别在通信设备等实时性要求较高的系统中,有比较广泛的应用。
(2)、嵌入式Linux操作系统:嵌入式Linux广泛应用的原因当然是免费、开源、支持软件多、支持者多,成本也低。
(3)、 Windows CE嵌入式操作系统:Windows CE是微软的操作系统,也有很大的市场份额,特别是在PDA、手机等界面要求较高或者要求快速开发的场合。
(1)、数字图像压缩技术:嵌入式最热门的应用领域之一,要掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高清电视、
机顶盒等都涉及MPEG高速解码问题。
(2)、
通信协议及编程技术:大多数
嵌入式设备都要连入局域网或Internet,所以首先应掌握TCP/IP协议及其编程;另外,掌握无线通信协议及编程也是是很重要的。
(3)、网络与信息安全技术:如加密技术,
数字证书CA等。
二、硬件方面的知识:
模拟电路、数字电路、计算机组成原理、
微处理器结构、
单片机等硬件课程是从事
嵌入式开发要掌握的。
嵌入式本身就是从单片机发展过来的,如今很多单片机都已经带OS,嵌入式开发领域,驱动人才非常缺乏。写驱动必须掌握操作系统的内部工作原理,包括相关的硬件知识,即所谓的软硬通吃,所以这方面的人才是一将难求。
应用特点
嵌入式计算机系统同通用型计算机系统相比具有以下特点:
1.嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由
板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
2.嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
3.嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除
冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对
处理器的选择更具有竞争力。
4.嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
5.为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在
存储器芯片或
单片机本身中,而不是存贮于磁盘等载体中。
6.嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
应用要素
嵌入式处理器
嵌入式系统的功能软件集成于硬件系统之中,系统的应用软件与硬件一体化。在嵌入式系统的硬件设备中,嵌入处理器是整个系统的核心部件,其性能的好坏直接决定整个系统的运行效果。Pc机销售市场中,随着通用cPu技术的突破和工作频率的倍增,旧款低档cPu早已经不见踪迹。嵌入式系统开发面向具体应用,不同领域的应用市场需要不同款式和性能指标的处理器来开发,于是在嵌入式处理器市场中,中低端的4位、8位和l6位处理器依然存在,高性能的
32位处理器也有很多产品。随着
超大规模集成电路技术和
微电子技术发展,包含嵌入式处理器以及部分外围电路的
微控制器产品也进入市场,片上系统soc(system on chip)产品也开始出瑚。这些产品的上市,不仅丰富了嵌入式处理器产品,而且也更加方便了工程技术人员进行嵌入式系统的技术开发和扩大嵌入式产品的应用领域。
由于嵌入式系统应用需求的多样性,市场上基于RIsc结构的嵌入式处理器提供商也日渐增多。统计数字表明,1999年底市场销售额排在前三位的公司分别是ARM、Motor01a和MIPs,其中ARM公司的芯片销售量达1.5亿个,市场份额超过50%。面对这样的嵌入式处理器市场,开发设计人员应该如何选择呢?这里有两个前提条件。一是深入研究具体的嵌入式系统应用需求,充分的应用需求分析后获取应用系统的性能指标。面向应用是嵌入式系统的特色,具体的应用需求决定着嵌入式处理器的性能选型。在工业控制等特殊领域,系统需求分析员不仅需要和工作人员、上级主管亲自面谈,而且要到工作现场获取第一手信息,收集充分的资料。应用需求分析后、需要定义产品具备的基本功能和性能指标,如系统处理的数据量大小和处理实时性要求、系统正常运行时的工作环境、系统运行过程中可能遇到的突发事件、系统的尺寸大小和功耗指标等。第二个前提条件是.分析研究市场上各大厂商提供的各款嵌入式处理器的性能指标,如功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等c这些参数也是各个半导体芯片厂商之间竞争的热点。
开发人员通过应用需求分析获取了产品的功能性和非功能性指标,研究了市场上嵌入式处理器的性能参数后,能够对嵌入式处理器作出较好的选择。嵌入式处理器选择的基本原则是满足具体功能性和非功能性指标需求的、市场应用反应良好的、硬件配置最少的嵌入式处理器。如简单的智能仪器仪表设计考虑使用4位或者8位低档单片机8051;和数字信号处理密切相关的选用TI公司的TMx320x系列的DsP(数字信号处理)芯片;如果产品偏重于通信功能,考虑Motorola公司的嵌入式处理器68K系列;如果产品功能比较齐全,可选用嵌入式处理器领域的后起之秀ARM公司的高性能嵌入式处理器
ARM芯片系列等。除了上述的产品性能需求因素,选择嵌入式处理器时也需要考虑开发人员对此系列处理器的熟悉程度c因为不同公司开发的嵌入式处理器差别较大,从一类处理器转移到另一类处理器的难度比同一系列不同处理器间的转移难度大得多,风险多得多。
以嵌入式处理器为中心,开发人员搭建好硬件电路时仅提供了裸机运行平台,要使整个系统有限的硬件资源充分利用起来,还需要(嵌入式)实时操作系统RTOs(RealTimeoperatingsystem)的软件支持。RTos与一般商用多任务os(如unix、windows以及LInux等j有共同的…面,也有不同的一面。商用多任务os主要目的是方便用户管理计算机资源和追求系统资源的最大利用率;而RTOs重点追求的是实时性、可确定性、可靠性,当然也包括有限资源的管理。一般RTOs内核都很小,在几KB~十几KB之间。流行的RTOs基本上都支持基于优先级的抢占式调度策略和
时间片轮转,具有微内核结构,有标准组件可供选用.支持
虚拟存储技术和存储保护机制。由于具体嵌入式应用的功能需求差异以及不同RTOs问不同的性能指标,RTOs的选择有三种方案:
当前全球范围内商用RTos多达200多种,应用领域的多样性使得市场反应较好的也将近有十几种,如Vxworks、psOs、Nucleus、QNx、wincE以及中科院软件研究中心研制的Hopen等。这些不同名称的RTOs,核心软件差异微妙而且难以琢磨,选择时重点是考虑它们的性能评价指标,主要包括调度算法、RTOs本身内存开销、RTOs内存管理模式、最大中断禁止时间和最大任务切换时间。当然,也包括RTOs的购买成本和提供的技术支持等相关因素。针对实时性要求较高的应用,需要重点考虑RTOs的最大中断禁止时间和最大任务切换时问。这两个参数越小越好。减小这两个参数值,除了选用较高工作主频的嵌入式处理器外,还和RTOs本身任务调度和中断处理机制密切相关。选择RTOs时,通常还要考虑系统功能方面支持何种处理器硬件平台,何种API,是否支持核心态用户态、是否支持内存管理单元MMu、可移植性、调试支持、标准支持等。如果开发网络应用,还需要考虑该RTOs是否支持TCP/IP的网络组件和I/O服务等。如果开发游戏和娱乐市场,要着重研究该RTos对多媒体的支持能力。市场应用需求的多样性,使得RTOs本身应该支持用户自定制能力,根据应用需要在微内核的基础上选用标准组件。
仿真器和调试器
调试是嵌入式系统开发过程的重要环节。嵌入式系统开发调试和一般pc系统开发调试有较大差别。在一般Pc机系统开发中,调试器和被调试程序是运行在相同的硬件和软件平台上的两个进程,而在嵌入式系统中,调试器是运行在桌面操作系统上的应用程序,被调试程序是运行在基于特定硬件平台的操作系统,两个程序问需要实时通信。嵌入式系统调试时,主机上运行的集成开发调试工具(调试器)通过仿真器和目标机相连a仿真器处理宿主机和目标机之间所有的通信,这个通信口可以是串并行口或者
高速以太网接口。仿真器通过JTAG口和目标机相连。
嵌入式系统开发调试方法有快速原型仿真法和实时在线调试法。快速原型仿真法用于硬件设备尚未完成时,直接在宿主机上对应用程序运行进行仿真分析。在此过程中系统不直接和硬件打交道,由开发调试软件内部某一特定软件模块模拟硬件cPu系统执行过程,并可同时将仿真异常反馈给开发者进行错误定位和修改。实时在线调试法在具体的目标机平台上调试应用程序.系统在调试状态下的执行情况和实际运行模式完全一样,这种方式更有利于开发者实时对系统硬件和软件故障进行定位和修改,提高产品开发速度。选用的调试器是运行在主机上的集成开发环境一般需要集编辑、汇编、编译、链接和调试环境于一体,支持低级汇编语言、c和c++语言,基于友好的
图形用户界面(GuI),支持用户观察或修改嵌入式处理器的寄存器和存储器配置、数据变量的类型和数值,堆栈和寄存器的使用,支持程序断点设置,单步、断点豉者全速运行等特性。应用需求的多样性导致市场上仿真器和调试器的提供商也较多,windriver公司的Tornado是一个很好的开发调试工具。根据实践经验,一般配套选择规模较大、信誉较好公司的仿真器和调试器,虽然价格偏高,但是这些公司技术实力强,售后服务好,调试器和仿真器开发结合紧密。如果在开发调试过程遇到技术障碍,可以通过电话或者电子邮件方式及时获取技术支持。如选用ARM系列的嵌入式处理器时,可以购买Multi—IcE仿真器.并附加ARM250集成开发调试环境等。
开发队伍的技术水平和结构比例
嵌入式系统开发中选择好了嵌入式处理器、RTOs、仿真器和调试器等设备外,还需要考虑开发队伍的技术水平和结构比例。经验丰富的开发小组都深有体会:民用产品开发中,产品能够在预计的时间内进入市场赢得效益,其整个技术范围内新技术比例至多只能达到20%,超过这个界限,估算的时间期限可能会出现较大偏差。从高层规划人员的角度分析:20%以内的新技术,公司可以集中力量,投入足够多的人力、物力和财力进行突破性研究,正常情况下可以达到满意效果。如果新技术超出20%这个范围,恐怕心有余而力不足。公司运作以市场作为向导,是市场赋予它们生命。
公司看重市场,付出的劳动有市场回报才能正常运转。公司在开发过程中一般都尽量避免风险,而且整个开发过程中始终将风险分析作为重要的参考因素。公司一般都选择保守的开发模式,基于当前开发人员的技术实力和已经达到的技术储备,在许多种备选方案的技术论证过程,充分分析成本收益、风险大小、投入资源、开发人员的技术水平等因素,全面考虑,权衡利弊,尽量选用可靠的,风险小的设计方案。在项目开发中,分配开发人员时不仅要确保任务在给定时间期限内完成的成功性,而且也要体现在锻炼培养后继人才方面。任何项目的开发,依据需求分析后,经过概要设计和详细设计,都会形成模块化结构,其工作难度也有一定的层次性。这样,公司在选派项目人员时,需要合理的人员结构安排,现在~般公认的人才结构比例是1(博士或
同等学历)3(硕士或同等学历):7(学士、大专或同等学历)。在项目开发中,除了开发人员的技术水平和结构比例外,小组内部的民主化、科学化管理决策也是很重要的环节。
核心技术
处理器技术
处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的
数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其它处理器不同。
(1)通用处理器
这类处理器可用于不同类型的应用,一个重要的特征就是
存储程序,由于设计者不知道处理器将会运行何种运算,所以无法用数字电路建立程序。另一个特征就是通用的数据路径,为了处理各类不同的计算,数据路径是通用的,其数据路径一般有大量的
寄存器以及一个或多个通用的
算术逻辑单元。设计者只需要对处理器的存储器编程来执行所需的功能,即设计相关的软件。 在嵌入式系统中使用通用
处理器具有设计指标上的一些优势。提前上市时间和NRE成本较低,因为设计者只需编写程序,而不需要做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。
当然,这种方式也有一些设计指标上的缺陷,数量大时的单位成本相对较高,因为数量大时,自行设计的NRE成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功 耗可能变大。
(2)单用途处理器
单用途处理器是设计用于执行特定程序的数字电路,也指协处理器、加速器、外设等。如JPEG
编码解码器执行单一程序,压缩或解压视频信息。嵌入式系统设计者可通过设计特定的数字电路来建立单用途的
处理器。设计者也可以采用预先设计好的商品化的单用途处理器。
在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时的单位成本可能较低,而设计时间与NRE成本可能较高,灵活性较差,数量小时的单位成本较高,对某些应用性能不如通用处理器。
(3)专用处理器
专用指令集处理器(
ASIP)是一个可编程处理器,针对某 一特定类型的应用进行最优化。这类特定应用具有相同的特征,如嵌入式控制、数字信号处理等。在嵌入式系统中使用ASIP可以保证良好的性能、功率和大小的 情况下,提供更大的灵活性,但这类
处理器仍需要昂贵的NRE成本建立处理器本身和编译器,
单片机和
数字信号处理器是两类应用广泛的ASIP,数字信号处理器是一种针对数字信号进行常见运算的
微处理器,而单片机是一种针对嵌入式控制应用进行最佳化的微处理器,通常控制应用中的常见外设,如
串行通信外设、定时 器、计数器、脉宽调制器及数/模
转换器等都集成到了微处理器芯片上,从而使得产品的体积更小、成本更低。
IC技术
(1)全定制/VLSI
在全定制IC技术中,需要根据特定的嵌入式系统的数字实现来优化各层,设计人员从晶体管的版图尺寸、位置、连线开始设计以达到芯片面积利用率高、速度快、功耗低的最优化性能。利用
掩膜在制造厂生产实际芯片,全定制的IC设计也常称为大规模
集成电路设计,具有很高的NRE成本、很长的制造时间,适用于大量或对性能要求严格的应用。
(2)半定制ASIC
半定制ASIC是一种约束型设计方法,包括门阵列设计法和 标准单元设计法。它是在芯片制作好一些具有通用性的单元元件和元件组的半成品硬件,设计者仅需要考虑电路的逻辑功能和各功能模块之间的合理连接即可。这种设计方法灵活方便、性价比高,缩短了设计周期,提高了成品率。
(3)可编程ASIC
可编程器件中所有各层都已经存在,设计完成后,在实验室里即可烧制出设计的芯片,不需要IC厂家参与,开发周期显著缩短。 可编程ASIC具有较低的NRE成本,单位成本较高,功耗较大,速度较慢。
设计/验证技术
嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。
芯片级设计技术的核心是编译/综合、库/IP、测试/验证。编译/综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。库/IP技术将预先设计好的低抽象级实现用于高级。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。
开发流程
第一步:建立开发环境
操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC
交叉编译器进行安装(比如,arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;
第二步:配置开发主机
配置MINICOM,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,9,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样。MINICOM软件的作用是作为调试
嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
第三步:建立引导装载程序BOOTLOADER
从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。
第四步:下载已经移植好的Linux操作系统
如MCLiunx、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于MCLiunx这样的系统只能编译内核进行调试。
第五步:建立根文件系统
下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs等工具产生烧写映像文件。
第六步:建立应用程序的FLASH磁盘分区
一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。
第七步:开发应用程序
可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II的方式。
第八步:烧写内核
根文件系统和应用程序,发布产品。