摘要:嵌入式系统被誉为“后PC”时代的新秀,其特点和开发技术备受人们关注。剖析了嵌入式系统的低功耗嵌入式微处理器,紧缩型操作系统,丰富的外部接口和外形等特点及模块化的内部结构,提出了基于宿主机—目标机模式的嵌入式系统的典型开发模式,这种开发模式具有整体开发思路清晰,便于系统分工,容易实现同步开发等优点。并详细分析了交叉编译和远程调试是宿主机—目标机模式的典型开发特征,对嵌入式系统的发展作了展望,提出网络化、SOC、低成本等是其发展的必然趋势。
随着计算机技术和通讯技术相结合的信息时代的快速发展,3C(即计算机、通信、消费电子) 一体化趋势日益明显。嵌入式系统凭借自身特点成为3C 一体化的理想载体,于是,对嵌入式系统的研究与开发成为当前的一个热点。
嵌入式系统( Embedded System) 通常被定义为:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统[1 ] 。嵌入式系统的关键技术包括以应用为中心的硬件平台设计和面向应用的操作系统及软件产品的开发。
广义上讲,凡是带有微处理器的专用软硬件系统都可称为嵌入式系统。如各类单片机和DSP 系统。这些系统在完成较为单一的专业功能时具有简洁高效的特点。但由于它们没有操作系统,管理系统硬件和软件的能力有限,在实现复杂多任务功能时,往往困难重重,甚至无法实现。从狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的嵌入式系统。目前,这类嵌入式系统已经广泛应用于通讯、医疗、工业控制、网络仪表、消费电子以及航空航天等各领域,展现出强大的生命力。
1 嵌入式系统特点
嵌入式系统作为专用计算机系统,和通用计算机相比,具有以下典型特点:
1) 嵌入式微处理器。它将通用CPU 中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有体积小、抗干扰性强、可靠性高和功耗低的特点,无需风扇降温。嵌入式系统不盲目追求CPU 速度,讲究芯片成本与功耗,功能的最佳匹配。嵌入式处理器的体系结构经历了从CISC(复杂指令集) 至RISC(精简指令集) 和CompactRISC 的转变,位数则由4 位、8 位、16 位、32 位逐步发展到64 位。相对通用微处理器而言,嵌入式微处理器的内核设计更加丰富多样,目前主流内核有MIPS 核、ARM 核、68 K/ COLDFIRE 核以及PowerPC 核,它们均是针对特定领域而量身设计的。
2) 紧缩型操作系统。紧缩是指经过特殊裁剪后的操作系统,它只留下了必须的管理模块,尽量地去掉所有不需要地模块,所以通常大小只有几兆,有时甚至不到1 兆。嵌入式系统的应用领域一般都是小型电子装置,系统资源相对有限,因此对操作系统的要求相当高,
嵌入式操作系统丰富多样,最为典型的有QNX、WinCE、VxWorks、pSOS、RT - Linux 等。
3) 嵌入式系统软硬件结合紧密。由于受到体积,功耗等因素的限制,嵌入式系统的存储器和外设资源有限,在嵌入式系统软硬件体系结构内部,各层次、模块之间的耦合度比通用计算机强,这是嵌入式系统要求高效的结果,而通用计算机出于可扩展等要求更强调系统的模块化、层次化和标准化。
4) 另外,嵌入式系统独特的,多样化的外观也是其不同于通用计算机的显著特征。
2 嵌入式系统层次结构
嵌入式系统由嵌入式硬件、嵌入式操作系统、支撑软件包和应用软件组成。其结构图可如图1 所示。
图1 嵌入式系统层次结构
嵌入式硬件平台不同于通用的PC 硬件平台,它没有一个固定的、标准的外形,可能是圆形、方形甚至三角形,而且大多体积很小。其外设接口被充分利用,没有用到的外设接口在设计硬件平台时被完全删除。例如,嵌入式智能控制器不需要图形用户界面和键盘,则在设计接口板时去掉其LCD 接口和键盘控制器。嵌入式硬件平台由核心板和接口板共同组成,在接口板接口较少时,有时也将接口板和核心板设计在一个板上。核心板包括嵌入式微处理器和微存储器,提供嵌入式操作系统和功能软件的运行环境;接口板完成外设接口功能;外设终端通常都是微小终端,以和嵌入式系统整体体积相匹配。
为了使嵌入式系统更具生命力,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面(GUI) 等。嵌入式操作系统根据应用场合可以分为两大类: 一类是面向消费电子产品的非实时系统(如WinCE、Linux 等) , 这类设备包括个人数字助理(PDA) 、移动电话等; 另一类则是面向控制、通信、测试、医疗等领域的实时操作系统(如VxWorks、RT -Linux 等) 。
实时系统(Real Time System) 是一种能够在指定或者确定时间内完成系统功能,并且对外部和内部事件在同步或者异步时间内能做出及时响应的系统。通常把中断延迟时间和任务上下文切换时间作为其测量指标[2 ] 。嵌入式系统大多是实时系统,因为专用领域许多时候要求的有很强实时性。图2 所示为一实时操作系统TR - Linux 的内部控制结构图[3 ] 。
图2 RT - Linux 内部控制结构图
无论是实时操作系统还是菲实时操作系统,嵌入式操作都具有以下特点:
1) 可配置性。这是嵌入式系统资源限制的结果。为了全面支持从低容量内存,甚至可能连内存管理单元都没有的低端系统到具有多处理机的高端系统,嵌入式操作系统采用模块化体系结构,即一个实时内核和一堆组件或库。这样根据系统需求,可以对嵌入式操作系统进行配置。
2) 易移植性。嵌入式操作系统要求适应各种CPU 体系结构,管理多样化外设,容易移植是必须的。嵌入式操作系统的易移植性通过采用板级支持包技术(BSP) 或硬件抽象层技术(HAL) 来完成。板级支持包内含片级初始化和设备驱动程序,它使嵌入式操作系统与嵌入式系统硬件平台相分离。当微处理器和外设不同时,它保护了开发者在应用程序上的开发投入。硬件抽象层也是类似的技术,它抽象一个硬件平台到一定程度,足以使操作系统内核被移植到该平台上。
3) 内核支持多任务,提供丰富的多线程通讯机制。一般默认情况下采用基于任务优先级的任务可抢先调度法,确保总是最先执行具有最高优先级的已就绪的任务;在此基础上增加轮转调度法,使同等优先级的已就绪任务公平占有CPU[4 ] 。
嵌入式系统的支撑软件包是完全为应用软件服务的,例如有些嵌入式系统需要图形界面,需要画图、画线等基本图形操作,这就需要相应的图形库来支撑。支撑软件包一般也是专门面向嵌入式开发而设计的精简软件包,其占用的资源不能过多。
嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件。它不仅要求准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。
3 嵌入式系统典型开发模式
嵌入式系统是一个复杂而专用的系统,在进行系统开发之前,必须明确定义系统的外部功能和内部软硬件结构;然后进行系统的设计分割,分别实现硬件规划与设计,应用软件规划与设计以及操作系统的裁剪;在操作系统裁剪和应用软件编码完成后,通常还将它们先移植到同系统结构的CPU 的硬件平台上进行远程调试、功能模拟;完整无误后,最后才将操作系统和应用软件移植到自己开发的专用硬件平台上,完成系统的集成。
其开发流程可如图3 所示。
图3 嵌入式系统开发流程
完成系统设计分割后,软件和硬件开发可以并行进行,也可以在完成硬件后在实现操作系统和应用软件的开发。
在以上流程中,操作系统的裁剪和应用软件的编码都是在通用的台式机或工作站上完成的,称这样的台式机为宿主机(其操作系统大多为Windows 系列,Linux 或Solaries 等) ;而待开发的硬件平台通常被称为目标机。这种在宿主机上完成软件功能,然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行的系统开发模式,称之为宿主机—目标机(Host - Target ) 模式,它是嵌入式系统常采用的一种典型开发模式。简图如图4 所示。
图4 宿主机—目标机开发模式
在宿主机—目标机开发模式中,交叉编译和远程调试是系统开发的重要特征。
1) 交叉编译。
宿主机上的CPU 结构体系和目标机上的CPU 结构体系是不同的,为了实现裁剪后的嵌入式操作系统和应用软件能在目标机上“跑”起来,移植它们之前,必须在宿主机上建立新的编译环境,进行和目标机CPU相匹配的编译,这种编译方式称为交叉编译。新建立的编译环境称之为交叉编译环境。交叉编译环境下的编译工具在宿主机上配置编译实现,必须是针对目标机CPU 体系的编译工具。只有这样,才对源代码编译生成的可执行映像,才会被目标机的CPU 识别。
2) 远程调试。
远程调试是一种允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。调试器是一个单独运行着的进程。在嵌入式系统中,调试器运行在宿主机的通用操作系统之上,被调试的进程运行在目标机的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
嵌入式系统的交叉调试可分为硬件调试和软件调试两种。硬件调试需要使用仿真调试器协助调试过程,硬件调试器的是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是ROM Monitor 、ROM Emulator 、In - Circuit Emulator 和In -Circuit Debugger 。而软件调试则使用软件调试器完成调试过程。通常要在不同的层次上进行,有时需要对嵌入式操作系统的内核进行调试,而有时可能仅仅只需要调试嵌入式应用程序就可以了[5 ] 。
在目标机上,嵌入式操作系统、应用程序代码构成可执行映像。我们可以在宿主机生成上述的完整映像,再移植到目标机上;也可以把应用程序做成可加载模块,在目标机操作系统启动后,从宿主机向目标机加载应用程序模块。
交叉开发集成环境( IDE) 是嵌入式系统开发的利器,可以有效的缩短开发周期。最著名的如美国风河(Wind River) 系统公司的Tornado II。它是一个拥有强大的开发和调试能力的图形界面开发工具,包括C和C + + 远程源码级调试器,目标和工具管理器,系统目标跟踪以及内存使用分析和自动配置[6 ] 。所有内部工具能方便的同时运行,很容易实现交互开发。但大多交叉开发集成环境和嵌入式开发套件配套销售,且只支持有限的嵌入式CPU 体系,价格不菲。
采用宿主机- 目标机开发模式进行嵌入式系统开发,具有整体思路清晰,便于系统分工,容易同步开发的特点,是嵌入式开发人员较理想的开发方式。作者目前已经启动的一个嵌入式医疗仪器开发项目,就是采用宿主机- 目标机模式,预计将在一年内完成。
4 结语
近几年来,嵌入式系统的应用越来越广泛,并呈以下发展趋势:
1) 嵌入式产品与互联网应用相互促进,快速发展,嵌入式产品将成为互联网的主要终端之一。
2) 随着微电子技术的快速发展,芯片功能更加强大,SOC(System on Chip) 将成趋势,这不仅能降低成本,缩小产品体积,还将增强产品的可靠性。
3) 软件硬件的紧密结合,嵌入式软件与硬件界线更加模糊,嵌入式软件时常以硬件形态存在,这种方式可提高实时性,增强可维护性。
4) 嵌入式操作系统会与嵌入应用软件协同发展。
昂贵的商用嵌入式操作系统在一定程度上抑制了嵌入式系统的更广泛应用。但随着免费Linux 操作系统的日趋成熟,嵌入式Linux 将成为新的嵌入式操作系统的研发基础。
作者对嵌入式系统的特征做了归纳;对其内部结构做了剖析;并提出了嵌入式系统典型开发模式下的重要开发特征,希望这些能对嵌入式系统的开发人员具有一定的参考意义。