第12章 嵌入式系统设计
随着计算机技术、微电子技术、通信技术以及集成电路技术的发展,嵌入式技术逐渐发展和成熟起来。嵌入式系统的应用日益广泛,并在数量上远远超越了通用计算机系统,成为了计算机技术和计算机应用领域的一个重要组成部分。
本章主要讨论嵌入式系统的基本知识与嵌入式系统的开发设计两部分内容,主要包括嵌入式系统的概念、软/硬件组成与基本架构、嵌入式操作系统和嵌入式数据库系统、网络系统以及窗口系统等核心支撑软件系统的基本原理和技术,最后介绍嵌入式系统的开发设计。
12.1 嵌入式系统概论
嵌入式系统是一种以应用为中心,以计算机技术为基础,可以适应不同应用对功能、可靠性、成本、体积、功耗等方面的要求,集可配置,可裁减的软、硬件于一体的专用计算机系统。它具有很强的灵活性,主要由嵌入式硬件平台、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。其中,“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本的核心要素,具体来讲:
嵌入性:指计算机计算机嵌入到对象系统中,且满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。
专用性:指软、硬件的裁剪性,满足对象要求的最小软、硬件配置等。
计算机系统:指嵌入式系统必须是一个能满足对象系统控制要求的计算机系统。
归纳起来,典型的嵌入式系统具有以下特点:
- (1)系统专用性强。嵌入式系统是针对具体应用的专门系统。它的个性化很强,软件和硬件结合紧密。一般要针对硬件进行软件的开发和移植,根据硬件的变化和增减对软件进行修改。由于嵌入式系统总是用来完成某一特定任务,整个系统与具体应用有机地结合在一起,升级换代也以更换整个产品的方式进行,因此,一个嵌入式产品一旦进入市场,一般具有较长的生命周期。
- (2)系统实时性强。嵌入式系统中有相当一部分系统要求对外来事件在限定的时间内及时做出响应,具有实时性。
- (3)软、硬件依赖性强。嵌入式系统的专用性决定了其软、硬件之间具有很强的互相依赖性,两者必须协同设计,以达到共同实现预定功能的目的,并满足性能、成本和可靠性等方面的严格要求。
- (4)处理器专用。嵌入式系统的处理器与通用计算机的处理器之间最大的不同之处在于,嵌入式系统的处理器一般是为某一特定目的和应用而专门设计的。通常具有功耗低、体积小、集成度高等优点,能够把许多在通用计算机上需要由板卡完成的任务和功能集成到芯片内部,从而有利于嵌入式系统的小型化和移动能力的增强。
- (5)多种技术紧密结合。嵌入式系统通常是计算机技术、半导体技术、电力电子技术及机械技术与各行业的具体应用相结合的产物。通用计算机技术也离不开这些技术,但它们相互结合的紧密程度不及嵌入式系统。
- (6)系统透明性。嵌入式系统在形态上与通用计算机系统差异甚大。它的输入设备往往不是常见的鼠标和键盘之类的设备,甚至没有输出装置,用户可能根本感觉不到它所使用的设备中有嵌入式计算机系统的存在,即使知道也不必关心这个嵌入式计算机系统的相关情况。
- (7)系统资源受限。嵌入式系统为了达到结构紧凑、可靠性高及降低系统成本的目的,其存储容量、输入/输出设备的数量和处理器的处理能力都比较有限。
12.2 嵌入式系统的组成
嵌入式系统一般都由软件和硬件两个部分组成,其中嵌入式处理器、存储器和外部设备构成整个系统的硬件基础。嵌入式系统的软件部分可以分为 3 个层次:系统软件、应用支撑软件和应用软件。其中,系统软件和支撑软件是基础,应用软件则是最能体现整个嵌入式系统的特点和功能的部分。
12.2.1 硬件架构
图 12-1 是一个嵌入式系统的基本硬件架构。微处理器是整个嵌入式系统的核心,负责控制系统的执行。外部设备是嵌入式系统同外界交互的通道,常见的外部设备有 Flash 存储器、键盘、输入笔、触摸屏、液晶显示器等输入/输出设备,在很多嵌入式系统中还有与系统用途紧密相关的各种专用外设。嵌入式系统中经常使用的存储器有 3 种类型:RAM、ROM(Read-Only Memory,只读内存)和混合存储器。系统的存储器用于存放系统的程序代码、数据和系统运行的结果。
1. 嵌入式处理器
嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前世界上嵌入式处理器的种类已经超过了 1000 种,比较流行的也有 30 几个系列。根据目前的使用情况,嵌入式处理器可以分为如下几类:
- (1)嵌入式微处理器。嵌入式微处理器(Embedded Micro Processing Unit,EMPU)是由通用计算机中的 CPU 演变而来。嵌入式微处理器在功能上跟普通的微处理器基本一致,但是它具有体积小、功耗低、质量轻、成本低及可靠性高的优点。通常,嵌入式微处理器和ROM、RAM、总线接口及外设接口等部件安装在一块电路板上,称为单板计算机。目前,主要的嵌入式微处理器有 AM186/88、386EX、SC-400、POWER PC、MIPS 及 ARM 等系列。
- (2)嵌入式微控制器。嵌入式微控制器(Embedded Micro Controlling Unit,EMCU)又称为单片机,就是整个计算机系统都集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成有 ROM/EPROM/E2PROM、RAM、总线、总线逻辑、定时器/计数器、WatchDog(监督定时器)、并口/串口、数模/模数转换器、闪存等必要外设。与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化,因而体积更小,功耗和成本更低,可靠性更高。
目前,嵌入式微控制器的品种和数量最多,约占嵌入式系统市场份额的 70%。比较有代表性的通用系列有:8051 系列、MCS-96/196/296、C166/167、MC68HC05/11/12/16 等。
还有许多半通用系列,如支持 UBS 接口的 MCU 8XC930/931、C540、C541 以及用于支持 I2C、现场总线等各种微控制器。
(3 )嵌入式数字信号处理器。嵌入式数字信号处理器(Embedded Digital Signal Processor,EDSP)是一种专门用于信号处理的处理器,DSP 芯片内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的 DSP 指令,可以用来快速实现各种数字信号的处理算法。目前,数字信号处理器在嵌入式系统中使用非常广泛,如数字滤波、快速傅立叶变换及频谱分析等。同时,嵌入式系统的智能化也是推动嵌入式 DSP 发展的一个动力,如各种带有智能逻辑的消费类产品、生物信息识别终端、带有加密/解密算法的设备、实时语音压缩和解压系统以及虚拟现实显示装置等,这类系统上的智能化算法一般运算量都比较大,这恰好可以充分发挥数字信号处理器的长处。
- (4)嵌入式片上系统。嵌入式片上系统(Embedded System On Chip)是一种在一块芯片上集成很多功能模块的复杂系统,如微处理器内核、RAM、USB、IEEE 1394、Bluetooth 等。
以往这些单元按照各自的功能做成一个个独立的芯片,并通过电路板与其他单元组成一个系统。现在将这些本来在电路板上的单元都集成到一个芯片中,构成一个嵌入式片上系统,从而大幅度缩小了系统的体积,降低了系统的复杂度,增强了系统的可靠性。在大量生产时,生产成本也远远低于单元部件组成的电路板系统。嵌入式片上系统可以分为通用片上系统和专用片上系统两类。通用类的主要产品有 Siemens 的 Trocore、Motorola 的 M-Core、某些ARM 系列的器件等。专用类的嵌入式片上系统一般是针对某一个或某些系统而设计的。具有代表性的产品有 Philips 的 Smart XA,它将 XA 单片机的内核和支持超过 2048 位复杂RSA 算法的 CCU 单元制作在一个芯片上,形成一个可加载 Java 或 C 的专用嵌入式片上系统,可用于网络安全等方面。
2. 总线
总线是连接计算机系统内部各个部件的共享高速通路,自 20 世纪 70 年代以来,工业界相继出现了多种总线标准,很多总线技术在嵌入式系统领域得到了广泛的应用。
嵌入式系统的总线一般分为片内总线和片外总线。片内总线是指嵌入式微处理器内的CPU 与片内其他部件连接的总线;片外总线是指总线控制器集成在微处理器内部或外部芯片上的用于连接外部设备的总线。
- (1)AMBA 总线。AMBA(Advanced Microcontroller Bus Archiecture,先进微控制器总线架构)是 ARM 公司研发的一种总线规范,该总线规范独立于处理器和制造工艺技术,增强了各种应用中外设和系统单元的可重用性,它提供将 RISC 处理器与 IP 核集成的机制。
该规范定义了三种总线:
先进性能总线(Advanced High-performance Bus,AHB)。AHB 由主模块、从模块和基础结构三部分组成,整个 AHB 总线上的传输都由主模块发起,从模块响应。基础结构包括:仲裁器、主从模块多路选择器、译码器、名义主模块、名义从模块等。AHB 系统具有时钟边沿触发、无三态、分帧传输等特性。AHB 也支持复杂的事务处理,如突发传送、主单元重试、流水线操作以及分批事务处理等。
先进系统总线(Advanced System Bus,ASB)。ASB 用于高性能模块的互连,支持突发数据传输模式,较老的总线格式,逐步由 AHB 总线所替代。
先进外设总线(Advanced Peripheral Bus,APB)。APB 主要用于连接低带宽外围设备,其总线结构只有唯一的主模块,即 APB 桥,它不需要仲裁器以及响应/确认信号,以最低功耗为原则进行设计,具有总是两周期传输、无等待周期和响应信号的特点。
- (2)PCI 总线。外围构件互连总线(Peripheral Component Interconnect,PCI)规范先后经历了 1.0 版本、2.0 版本和 2.1 版本等一系列规范。PCI 总线是地址、数据复用的高性能 32 位与 64 位总线,是微处理器与外围设备互连的机构,它规定了互连协议、电气、机械以及配置空间的标准。PCI 是不依赖于具体处理器的局部总线,从结构上看,PCI 是在微处理器和原来的系统总线之间加入的一级总线,由一个桥接电路负责管理,实现上下接口和协调数据传送,管理器提供了信号缓冲,使多种外设能够在高时钟频率下保持高性能。
PCI 总线支持主控技术,允许智能设备在需要时获得总线控制权,以加速数据传输。
为了将 PCI 总线规范应用到工业控制计算机中,1995 年,推出了 Compact PCI 规范,并相继推出了 PCI-PCI Bridge 规范、Computer TelephonyTDM 规范和用户定义 I/O 引脚分配规范等。CPCI 总线规范有机地结合了 PCI 总线电气规范的高性能和欧洲卡结构的高可靠。
目前,CPCI 总线已经在嵌入式系统、工业控制计算机等高端系统中得到了广泛的应用,并逐步替代了 VME 和 MultiBUS 总线。
- (3)Avalon 总线。Avalon 总线是 Altera 公司设计的用于可编程片上系统(System onProgrammable Chip,SOPC)中,连接片上处理器和其他 IP 模块的一种简单总线协议,规定了主部件和从部件之间进行连接的端口和通信时序。
作为总结,表 12-1 对比了几种嵌入式总线技术的主要特点。
3. 存储器
嵌入式系统的存储器主要包括主存和外存,图 12-2 所示为嵌入式系统的存储结构,嵌入式系统的存储器主要分为三种:高速缓存(Cache)、片内主存和片外主存以及外存。
- (1)高速缓存。高速缓存是存放当前使用最多的程序代码和数据的,即主存中部分内容的副本,在嵌入式系统系统中,Cache 全部集成在嵌入式微处理器内部,可以分为:数据Cache、指令 Cache 和混合 Cache。
- (2)主存。主存是处理器能够直接访问的存储器,用来存放系统和用户的程序和数据,系统上电后,主存中的代码直接运行,主存的主要特点是速度快,一般采用 ROM、EPROM、NOR flash、SRAM 和 DRAM 等存储器件。
- (3)外存。外部存储器是不与运算器直接联系的后备存储器,用来存放不常用的或暂不使用的信息,外存一般以非易失性存储器构成,数据能够持久保存,即使掉电,也不消失。
Flash 存储器是在 EPROM 和 EEPROM 的基础上发展起来的非易失性存储器,具有结构简单、可靠性高、体积小、质量轻、功耗低、成本低等优点,是最常用的一种外存类型。
4. I/O 设备与接口
因其应用领域的不同,嵌入式系统的输入设备多种多样,比较常见的有键盘、鼠标、触摸屏、手柄、声控开关等。通常,根据输入设备实现机理的不同,嵌入式系统的设备可以分为:机械式、触控式以及声光式三类。嵌入式系统的输出设备除了通用计算机常用的显示器、打印机、绘图仪等外,还包括 LED 指示灯、LCD 屏幕、扬声器等媒体。嵌入式系统与外部设备或其他的计算机系统进行通信时,需经接口适配电路,进行工作速度、数据格式、电平等匹配与转换,嵌入式系统应用的接口形式是多种多样的。
嵌入式系统中接口电路的设计需要首先考虑的是电平匹配问题,嵌入式系统微处理器所提供与接收信号的电平,必须与所连接的设备的电平相匹配,否则将导致电路损坏或逻辑判定错误。其次,还要考虑驱动能力和干扰问题等因素。
当前,在嵌入式系统中广泛应用的接口主要有:RS232-串行接口、并行接口、USB 接口、IEEE-1394 接口以及 RJ-45 接口等,此外,以蓝牙为代表的无线接口在嵌入式系统中的应用也日趋广泛。
- (1)RS-232 接口。RS-232 接口是美国电子工业协会推广的一种串行通信总线标准,是数据通信设备和数据终端设备间传输数据的接口总线,RS-232-C 标准规定其最高速率为20kbps,在低码元畸变的情况下,最大传输距离是 15 米,通过使用增强器,其传输距离已经延长到 1000 米左右。
- (2)USB 接口。USB(Universal Serial Bus,通用串行总线)是 1995 年由康柏等几大厂商共同制定的一种支持即插即用的外设接口标准,它支持 USB 外部设备到主机外部总线的连接。在 USB 系统中,必须有一个 USB 主控制器,USB 设备通过四根电缆与 USB 主控制器直接或间接相连,USB 的规范由最初的 1.0 版本发展到了 1.1 版本,以至当前主流的高速 2.0 版本,最高速率可到 480Mbps。
- (3)1394 接口。IEEE1394 即火线(FireWire)最初是由 Apple 公司研制的,1995 年IEEE 协会以 FireWire 为蓝本制定了这个串行接口标准,其电缆接口为 6 根电缆组成,包括一堆电源线和两对双绞信号线。IEEE1394 协议定义了三种传输速率:98.304Mbps、196.608Mbps 和 392.216Mbps,分别称之为 S100、S200 和 S400。为了保证数据传输率,线缆的长度一般不超过 4.5m。
IEEE1394 标准通过所有连接设备建立起一种对等网络,不需要主控节点来控制数据流,即跟 USB 技术相比,最大的区别是 IEEE1394 不需要主控制器,不同的外设之间可以直接传递信息,此外,采用该技术,两台计算机可以共享同一个外部设备。
IEEE1394 同时支持同步和异步传输两种模式。在异步传输模式下,信息的传递可以被中断,在同步模式下,数据将不受任何中断和干扰下实现连续传输。采用异步传输模式时,IEEE1394 会根据不同的设备实际需要分配相应的带宽。同时,IEEE1394 设备也支持热插拔和即插即用。
12.2.2 软件架构
随着嵌入式技术的发展,特别是在后 PC 时代,嵌入式软件系统得到了极大的丰富和发展,形成了一个完整的软件体系,如图 12-3 所示。
这个体系自底向上由三部分组成:嵌入式操作系统、应用支撑软件和应用软件。
- (1)操作系统。嵌入式操作系统由操作系统内核、应用程序接口、设备驱动程序接口等几部分组成。嵌入式操作一般采用微内核结构。操作系统只负责进程的调度、进程间的通信、内存分配及异常与中断管理最基本的任务,其他大部分的功能则由支撑软件完成。
- (2)应用支撑软件。嵌入式系统中的应用支撑软件由窗口系统、网络系统、数据库管理系统及 Java 虚拟机等几部分组成。对于嵌入式系统来讲,软件的开发环境大部分在通用台式计算机和工作站上运行,但从逻辑上讲,它仍然被认为是嵌入式系统支撑软件的一部分。
应用支撑软件一般用于一些浅度嵌入的系统中,如智能手机、个人数字助理等。
- (3)应用软件。嵌入式系统中的应用软件是系统整体功能的集中体现。系统的能力总是通过应用软件表现出来的,一个嵌入式系统可以没有支撑软件,甚至可以没有操作系统,但不可以没有应用软件,否则它就不可能成为一个系统。从范围上讲,嵌入式系统的应用软件涉及工业控制、家电、商业、通信等诸多领域。从跟用户的交互方式上讲,有跟桌面系统类似的软件,也有嵌入程度很深、使用户感觉不到其存在的应用软件。从运行环境上讲,有在操作系统和支撑软件上运行的软件,也有直接在硬件上运行的应用软件。
12.3 嵌入式开发平台与调试环境
嵌入式系统的应用支撑软件近年来发展迅速。通常,应用支撑软件包括窗口系统、数据库管理系统及 Java 虚拟机等几个部分。应用支撑软件的出现大大改变了应用软件的开发条件,同时也使得应用系统的功能不断增强。本节主要介绍嵌入式开发环境与软件调试技术。
12.3.1 嵌入式系统软件开发平台
嵌入式系统的软件开发方法采用的不是通用的开发方法,而是交叉式开发方法。本小节主要介绍嵌入式系统软件开发的交叉编译环境的基本概念和特点,以及软件调试常用的几种方法。
1. 交叉平台开发环境
嵌入式系统的软件开发采用交叉平台开发方法(Cross Platform Development,CPD),即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台通常叫作宿主机系统,被开发的嵌入式系统称为目标机系统。而当软件执行环境和开发环境一致时的开发过程则称为本地开发(Native Development,ND)。
图 12-4 是一个典型的交叉平台开发环境,通常包含三个高度集成的部分:
- (1)运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
- (2)运行在目标机上的高性能、可裁剪的实时操作系统。
- (3)连接宿主机和目标机的多种通信方式,例如,以太网,串口线,ICE(In CircuitEmulator,在线仿真器)或 ROM 仿真器等。
2.交叉编译环境
宿主机提供的基本开发工具是交叉编译器、交叉链接器和源代码调试器。作为目标机的嵌入式系统则可能提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。
嵌入式系统开发人员需要完全了解目标机系统如何在嵌入式系统上存储程序映像、可执行映像如何下载到内存及执行控制如何传给应用,以及运行期间如何和何时装载程序映像,如何交叉式地开发和调试应用系统。这些方面对代码如何开发、编译、链接等步骤都有影响。
图 12-5 是一个典型的交叉编译环境的示例,显示了如何使用开发工具处理各种输入文件,并产生最终目标文件的过程。其中,交叉编译器将用户编写的 C/C++/Java 源代码文件根据目标机的 CPU 类型生成包含二进制代码和程序数据的目标文件。在此过程中,交叉编译器会建立一个符号表,包含所产生的目标文件中指向映像地址的符号名,当建立重定位输出时,编译器为每个相关的符号产生地址。
通常,还可以使用归档工具将这些目标文件收集到一起形成一个库。最后,链接器将这些目标文件作为输入来产生一个可执行的映像。
一般,用户会先编辑一个链接脚本文件,用来指示链接器如何组合和重定位各个代码段以便生成最终文件。此外,链接器还可以将多个目标文件组合成一个更大的重定位目标文件或一个共享目标文件。
目前,嵌入式系统中常用的目标文件格式是 COFF(Common Object File Format,公共对象文件格式)和 ELF(Executable Linking Format,可执行链接格式)。另外,一些系统还需要有一些专门的工具将上述格式转换成二进制代码格式才可使用。
通常,一个目标文件包含:
- (1)关于目标文件的通用信息,如文件尺寸、启动地址、代码段和数据段等。
- (2)机器架构特定的二进制指令和数据。
- (3)符号表和重定位表。
- (4)调试信息。
12.3.2 嵌入式开发调试
通用系统与嵌入式系统的软件调试过程存在着明显的差异。对于通用系统,调试工具与被调试的程序位于同一台计算机上,调试工具通过操作系统的调试接口来控制被调试的程序。
但是在嵌入式系统中,由于资源的限制,不能直接在其上开发应用程序,调试过程通常也以交叉方式进行的。在实际开发实践中,经常采用的调试方法有直接测试法、调试监控法、在线仿真法、片上调试法及模拟器法等。
1. 直接调试法
直接调试法就是将目标代码下载到目标机上,让其执行,通过观察指示灯来判断程序的运行状态。在嵌入式系统发展的早期一般采用这种方式进行调试,其基本步骤是:
- (1)在宿主机上编写程序。
- (2)在宿主机上编译、链接生成目标机可执行程序代码。
- (3)将可执行代码写入目标机的存储器中。
- (4)在目标机运行程序代码。
- (5)判断程序的运行情况,如有错误则纠正错误,重复以上步骤,直到正确为止。
- (6)将可执行代码固化到目标机,开发完成。
这种方法是最原始的调试方法,程序运行时产生的问题,只有通过检查源代码来解决,因而开发效率很低。
2. 调试监控法
调试监控法也叫插桩法。目标机和宿主机一般通过串行口、并行口或以太网相连接,采用这种方法还需要在宿主机的调试器内和目标机的操作系统上分别启动一个功能模块,然后通过这两个功能模块的相互通信来实现对应用程序的调试。在目标机上添加的模块叫作桩,也叫调试服务器或调试监控器,主要有两个作用:其一,监视和控制被调试的程序;其二,跟宿主机上调试程序通信,接收控制指令,返回结果等。
在进行调试的时候,宿主机上的调试器通过连接线路向调试监控器发送各种请求,实现目标机内存读/写和寄存器访问、程序下载、单步跟踪和设置断点等操作。来自宿主机的请求和目标机的响应都按照预定的通信协议进行交互。
使用插桩法作为调试手段时,开发应用程序的基本步骤是:
- (1)在宿主机上编写程序的源代码。
- (2)在宿主机编译、链接生成目标机可执行程序。
- (3)将目标机可执行代码下载到目标机的存储器中。
- (4)使用调试器进行调试。
- (5)在调试器帮助下定位错误。
- (6)在宿主机上修改源代码,纠正错误,重复上述步骤直到正确为止。
- (7)将可执行代码固化到目标机上。
相对于直接测试法,插桩法明显地提高了开发效率,降低了调试的难度,缩短了产品的开发周期,有效降低了开发成本。但是插桩法仍有明显的缺点,主要体现在以下几个方面:
- (1)调试监控器本身的开发是个技术难题。
- (2)调试监控器在目标机中要占用一定的系统资源,如 CPU 时间、存储空间及串口或网络接口等外设资源。
- (3)调试时,不能响应外部中断,对有时间特性的程序不适用。
- (4)在调试过程中,被调试的程序实际上在调试监控器所提供的环境中运行,这个环境可能会与实际目标程序最终的运行环境有一定的差异,这种差异有可能导致调试通过的程序最后仍不能运行。
为了克服插桩法的缺点,出现了一种改良的方法,即 ROM 仿真器法。
ROM 仿真器可以被认为是一种用于替代目标机上 ROM 芯片的硬件设备,ROM 仿真器一端跟宿主机相连,一端通过 ROM 芯片的引脚插座与目标机相连。对于嵌入式处理器来说,ROM 仿真器像是一个只读存储器,而对于宿主机来说,像一个调试监控器。ROM 仿真器的地址可以实时映射到目标机的 ROM 地址空间里,所以它可以仿真目标机的 ROM。
ROM 仿真器在目标机和宿主机之间建立了一条高速信息通道,其典型的应用就是跟插桩法相结合,形成一种功能更强的调试方法。该方法具有如下优点:
- (1)不必再开发调试监控器。
- (2)由于是通过 ROM 仿真器上的串行口、并行口或网络接口与宿主机连接,所以不必占用目标机上的系统资源。
- (3)ROM 仿真器代替了目标机上原来的 ROM,所以不必占用目标机上的存储空间来保存调试监控器。
- (4)另外,即使目标机本身没有 ROM,调试依然可以进行,并且不需要使用专门工具向 ROM 写入程序和数据。
3. 在线仿真法
ICE 是一种用于替代目标机上 CPU 的设备。对目标机来说,在线仿真器就相当于它的CPU,在线仿真器本身就是一个嵌入式系统,有自己的 CPU、内存和软件。在线仿真器的 CPU可以执行目标机的所有指令,但比一般的 CPU 有更多的引脚,能够将内部信号输出到被控制的目标机上,在线仿真器的存储器也被映射到用户的程序空间,因此,即使没有目标机,仅用在线仿真器也可以进行程序的调试。
在线仿真器和宿主机一般通过串行口、并行口或以太网相连接。在连接在线仿真器和目标系统时,用在线仿真器的 CPU 引出端口替代目标机的 CPU。在用在线仿真器调试程序时,在宿主机运行一个调试器界面程序,该程序根据用户的操作指令控制目标机上的程序运行。
在线仿真器能实时地检查运行程序的处理器的状态,设置硬件断点和进行实时跟踪,所以提供了更强的调试功能。在线仿真器,支持多种事件的触发断点,这些事件包括内存读写、I/O 读写及中断等。在线仿真器的一个重要特性就是实时跟踪,在线仿真器上有大容量的存储器用来保存每个指令周期的信息,这个功能使用户可以知道事件发生的精确时序,特别适于调试实时应用、设备驱动程序和对硬件进行功能测试。但是,在线仿真器的价格一般都比较昂贵。
4. 片上调试法
片上调试(In Circuit Debugger,ICD)是 CPU 芯片内部的一种用于支持调试的功能模块。
按照实现的技术,片上调试可以分为仿调试监控器、后台调试模式(Background DebuggingMode,BDM)、连接测试存取组(Joint Test Access Group,JTAG)和片上仿真(On Chip Emulation,OnCE)等几类。仿调试监控器类的 ICD 芯片产品有 Motorola 的 CPU16、 CPU32 和ColdFire 等系列,BDM 类的主要有 Motorola 的 MPC5xx 和 MPC8xx 系列等, OnCE 类的主要有 Motorola 的 DSP 芯片系列,JTAG 类的主要有 PPC6xxx、PPC4xx、 ARM7TDMI、ARM9TDMI 及 Intel1960 等。
目前,使用较多的是采用 BDM 技术的 CPU 芯片。这种芯片的外面有跟调试相关的引脚,这些引脚在调试的时候被引出,形成一个与外部相连的调试接口,这种 CPU 具有调试模式和执行模式两种不同的运行模式。当满足了特定的触发条件时,CPU 进入调试模式,在调试模式下,CPU 不再从内存中读取指令,而是通过其调试端口读取指令,通过调试端口还可以控制 CPU 进入和退出调试模式。这样在宿主机上的调试器就可以通过调试端口直接向目标机发送要执行的指令,使调试器可以读/写目标机的内存和寄存器,控制目标程序的运行及完成各种复杂的调试功能。
该方法的主要优点是:不占用目标机的通信端口等资源;调试环境和最终的程序运行环境基本一致;无须在目标机上增加任何功能模块即可进行;支持软、硬断点;支持跟踪功能,可以精确计量程序的执行时间;支持时序逻辑分析等功能。
该方法的缺点是:实时性不如在线仿真器法强;使用范围受限,如果目标机不支持片上调试功能,则该方法不适用;实现技术多样,标准不完全统一,工具软件的开发和使用均不方便。
5. 模拟器法
模拟器是运行于宿主机上的一个纯软件工具,它通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式应用程序的目的。
模拟器适合于调试非实时的应用程序,这类程序一般不与外部设备交互,实时性不强,程序的执行过程是时间封闭的,开发者可以直接在宿主机上验证程序的逻辑正确性。当确认无误后,将程序写入目标机上就可正确运行。
模拟器有两种主要类型:一类是指令级模拟器,在宿主机模拟目标机的指令系统;另一类是系统调用级模拟器,在宿主机上模拟目标操作系统的系统调用。指令级的模拟器相当于宿主机上的一台虚拟目标机,该目标机的处理器种类可以与宿主机不同,如宿主机是英特尔的 x86 系列机,而虚拟机可以是 ARM、PowerPC、MIPS 等。比较高级的指令级模拟器还可以模拟目标机的外部设备,如键盘、串口、网络接口等。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机操作系统的类型可以跟宿主机的不同。两种类型的模拟器相比较,指令级模拟器所提供的运行环境与实际目标机更为接近。
使用模拟器的最大好处是在实际的目标机不存在的条件下就可以为其开发应用程序,并且在调试时利用宿主机的资源提供更详细的错误诊断信息,但模拟器有许多不足之处:
- (1)模拟器环境和实际运行环境差别很大,无法保证在模拟条件下通过的应用程序也能在真实环境中正确运行。
- (2)模拟器不能模拟所有的外部设备,嵌入式系统通常包含诸多外设,但模拟器只能模拟少数部分。
- (3)模拟器的实时性差,对于实时类应用程序的调试结果可能不可靠。
- (4)运行模拟器需要较高的宿主机配置。
尽管模拟器有很多的不足之处,但在项目开发的早期阶段,其价值是不可估量的,尤其对那些实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。
12.4 嵌入式网络系统
嵌入式网络是用于连接各种嵌入式系统,使之可以互相传递信息、共享资源的网络系统。
嵌入式系统在不同的场合采用不同的连接技术,如在家庭居室采用家庭信息网,在工业自动化领域采用现场总线,在移动信息设备等嵌入式系统则采用移动通信网,此外,还有一些专用连接技术用于连接嵌入式系统。
12.4.1 现场总线网
现场总线(FieldBus)是 20 世纪 80 年代中期继模拟仪表控制系统、集中式数字控制系统及集散控制系统之后,发展起来的一项计算机控制技术,它是当今自动化控制领域技术发展的热点之一,通常也被称作工业自动化领域的计算机局域网。
现场总线是一种将数字传感器、变换器、工业仪表及控制执行机构等现场设备与工业过程控制单元、现场操作站等互相连接而成的网络。它具有全数字化、分散、双向传输和多分支的特点,是工业控制网络向现场级发展的产物。
现场总线是一种低带宽的底层控制网络,位于生产控制和网络结构的底层,因此也被称为底层网(Infranet)。它主要应用于生产现场,在测量控制设备之间实现双向的、串行的、多节点的数字通信。
现场总线控制系统(Field Control System,FCS)是运用现场总线连接各控制器及仪表设备而构成的控制系统,该控制系统将控制功能彻底下放到现场,降低了安装成本和维护费用。
实际上 FCS 是一种开放的、具有互操作性的、彻底分散的分布式控制系统。
嵌入式现场控制系统将专用微处理器置入传统的测量控制仪表,使其具备数字计算和数字通信能力。它采用双绞线、电力线或光纤等作为总线,把多个测量控制仪表连接成网络,并按照规范标准的通信协议,在位于现场的多个微机化测量控制设备之间及现场仪表与远程监控计算机之间,实现数据传输与信息交换,形成了各种适用于实际需要的自动控制系统。
简言之,现场总线控制系统把单个分散的测量控制设备变成网络节点,以现场总线为纽带,使这些分散的设备成为可以互相沟通信息共同完成自动控制任务的网络系统。借助于现场总线技术,传统上的单个分散控制设备变成了互相沟通、协同工作的整体。
12.4.2 家庭信息网
家庭信息网是一种把家庭范围内的个人计算机、家用电器、水、电、气仪表、照明设备和网络设备、安全设备连接在一起的局域网。其主要功能是集中控制上述设备并将其接入Internet,以共享网络资源和服务。此外,家庭信息网还可以扩展至整幢住宅甚至整个社区,成为智能住宅小区和智能社会的基础。
在家庭信息网络系统中,所有的家庭设备都是智能化的,包括家用电器、水、电、气仪表,以及照明设备等。它们能够互相通信,并通过家庭网关接入 Internet。家庭信息网络的实现为人们提供了更加安全、便捷、舒适的家庭环境。如主人外出时,大门自动关闭、上锁,监视系统自动开启,家中出现异常情况能够自动通知主人,对家中各种设备能够随时随地进行控制,仪表数据能够自动上传等。
家庭信息网需要解决两个基本问题:
- (1)如何将家用电器,水、电、气仪表,照明设备等互相连接起来。
- (2)如何实现这些连在一起的设备间的互操作,即家庭信息网上的设备可以在需要的时候自动请求服务,相关设备可以提供服务或接受请求并对其进行处理。
家庭信息网可以采用不同的拓扑结构,如总线型、星型结构等。家庭信息网内部还可以进一步划分出若干控制子网和数据子网,其中控制子网类似于现场总线,是一种带宽不高、主要用于发送和接收控制信息的网络。而数据子网对带宽的要求则较高,连接在其上的设备需要传送大量的数据信息。
11.4.3 无线数据通信网
近年来,随着移动电话通信的迅速发展,个人计算机的迅速普及,多种便携式计算机,例如膝上型计算机、笔记本计算机、手持式计算机等迅速增多,固定计算机之间的数据通信已不能满足需要。人们希望能随时随地进行数据信息的传送和交换,于是数据通信传输媒体开始从有线扩展到无线,出现了无线移动数据通信。
无线数据通信网是一种通过无线电波传送数据的网络系统。它是在有线数据通信的基础上发展起来的,能实现移动状态下的数据通信。通过无线数据通信网,智能手机、PDA 及笔记本计算机可以互相传递数据信息,并接入 Internet。
无线数据通信网分为短程无线网和无线 Internet。短程无线网主要包括 802.11、蓝牙、IrDA 及 HomeRF 等。无线 Internet 或移动 Internet 主要采用两种无线连接技术:一种是移动无线接入技术,例如,GSM、GPRS、CDPD(Cellular Digital Packet Data)等;另一种是固定无线接入技术,包括微波、扩频通信、卫星及无线光传输等。
12.4.4 嵌入式 Internet
随着 Internet 和嵌入式技术的飞速发展,越来越多的信息电器,如 Web 可视电话、机顶盒以及信息家电等嵌入式系统产品都要求与 Internet 连接,来共享 Internet 所提供的方便、快捷、无处不在的信息资源和服务,即嵌入式 Internet 技术。嵌入式 Internet 技术在智能交通、家政系统、家庭自动化、工业自动化、POS 及电子商务等领域具有广阔的应用前景。
1. 嵌入式 Internet 的接入方式
嵌入式设备上集成了 TCP/IP 协议栈及相关软件,这类设备可以作为 Internet 的一个节点,分配有 IP 地址,与 Internet 直接互联。这种接入方式的特点是:
设备可以直接连接到 Internet,对 Internet 进行透明访问;
不需要专门的接入设备;
设备的协议标准化;
需要的处理器性能和资源相对较高;
需要占用 IP 资源,由于目前 IPv4 资源紧张,这种方案在 IPv6 网中可能更现实。
通过网关接入 Internet,即采用瘦设备方案,设备不直接接入 Internet,不需要复杂的TCP/IP 协议全集,而是通过接入设备接入 Internet。如嵌入式微型网互联技术(EmbeddedMicro Internet-working Technology,EMIT)便是一种将嵌入式设备接入 Internet 的技术。这种接入方式的特点是:
对接入设备的性能和资源要求较低;
接入设备的协议栈开销较小;
不需要分配合法的 IP 地址;
可以降低系统的整体成本;
设备可以实现多样化、小型化。
2. 嵌入式 TCP/IP 协议栈
嵌入式 TCP/IP 协议栈完成的功能与完整的 TCP/IP 协议栈是相同的,但是由于嵌入式系统的资源限制,嵌入式协议栈的一些指标和接口等与普通的协议栈可能有所不同。
- (1)嵌入式协议栈的调用接口与普通的协议栈不同。普通协议栈的套接字接口是标准的,应用软件的兼容性好,但是,实现标准化接口的代码开销、处理和存储开销都是巨大的。
因此,多数厂商在将标准的协议栈接口移植到嵌入式系统上的时候,都做了不同程度的修改简化,建立了高效率的专用协议栈,它们所提供的 API 与通用协议栈的 API 不一定完全一致。
- (2)嵌入式协议栈的可裁剪性。嵌入式协议栈多数是模块化的,如果存储器的空间有限,可以在需要时进行动态安装,并且都省去了接口转发、全套的 Internet 服务工具等几个针对嵌入式系统非必需的部分。
- (3)嵌入式协议栈的平台兼容性。一般协议栈与操作系统的结合紧密,大多数协议栈是在操作系统内核中实现的。协议栈的实现依赖于操作系统提供的服务,移植性较差。嵌入式协议栈的实现一般对操作系统的依赖性不大,便于移植。许多商业化的嵌入式协议栈支持多种操作系统平台。
- (4)嵌入式协议栈的高效率。嵌入式协议栈的实现通常占用更少的空间,需要的数据存储器更小,代码效率高,从而降低了对处理器性能的要求。
12.5 嵌入式数据库管理系统
随着嵌入式技术的发展,嵌入式数据库逐步走向应用。本质上,嵌入式数据库是由通用数据库发展而来的,在各种嵌入式设备上或移动设备上运行,在嵌入式系统中更显示出其优越性,由于受到嵌入式系统本身应用环境的制约,嵌入式数据库有着与通用数据库不同的特点。
通常,嵌入式数据库管理系统就是在嵌入式设备上使用的数据库管理系统。由于用到嵌入式数据库管理系统的多是移动信息设备,诸如掌上电脑、PDA、车载设备等移动通信设备,位置固定的嵌入式设备很少用到,所以,嵌入式数据库也称为移动数据库或嵌入式移动数据库。其作用主要是解决移动计算环境下数据的管理问题,移动数据库是移动计算环境中的分布式数据库。
在嵌入式系统中引入数据库技术,主要是因为直接在嵌入式操作系统或裸机之上开发信息管理应用程序存在如下缺点:
- (1)所有的应用都要重复进行数据的管理工作,增加了开发难度和代价。
- (2)各应用之间的数据共享性差。
- (3)应用软件的独立性、可移植性差,可重用度低。
在嵌入式系统中引入数据库管理系统可以在很大程度上解决上述问题,提高应用系统的开发效率和可移植性。
12.5.1 使用环境的特点
嵌入式数据库系统是一个包含嵌入式数据库管理系统在内的跨越移动通信设备、工作站或台式机及数据服务器的综合系统,系统所具有的这个特点及该系统的使用环境对嵌入式数据库管理系统有着较大的影响,直接影响到嵌入式数据库管理系统的结构。其使用环境的特点可以简单地归纳如下:
- (1)设备随时移动性,嵌入式数据库主要用于移动信息设备上,设备的位置经常随使用者一起移动。
- (2)网络频繁断接,移动设备或移动终端在使用的过程中,位置经常发生变化,同时也受到使用方式、电源、无线通信及网络条件等因素的影响。所以,一般并不持续保持网络连接,而是经常主动或被动地间歇性断接和连接。
- (3)网络条件多样化,由于移动信息设备位置的经常变化,所以移动信息设备同数据服务器在不同的时间可能通过不同的网络系统连接。这些网络在网络带宽、通信代价、网络延迟、服务质量等方面可能有所差异。
- (4)通信能力不对称,由于受到移动设备的资源限制,移动设备与服务器之间的网络通信能力是非对称的。移动设备的发送能力都非常有限,使得数据服务器到移动设备的下行通信带宽和移动设备到数据服务器之间的上行带宽相差很大。
12.5.2 系统组成与关键技术
一个完整的嵌入式数据库管理系统由若干子系统组成,包括主数据库管理系统、同步服务器、嵌入式数据库管理系统、连接网络等几个子系统,如图 12-6 所示。
- (1)嵌入式数据库管理系统。嵌入式数据库管理系统是一个功能独立的单用户数据库管理系统。它可以独立于同步服务器和主数据库管理系统运行,对嵌入式系统中的数据进行管理,也可以通过同步服务器连接到主服务器上,对主数据库中的数据进行操作,还可以通过多种方式进行数据同步。
- (2)同步服务器。同步服务器是嵌入式数据库和主数据库之间的连接枢纽,保证嵌入式数据库和主数据库中数据的一致性。
- (3)数据服务器。数据服务器的主数据库及数据库管理系统可以采用 Oracle 或 Sybase等大型通用数据库系统。
- (4)连接网络。主数据库服务器和同步服务器之间一般通过高带宽、低延迟的固定网络进行连接。移动设备和同步服务器之间的连接根据设备的具体情况可以是无线局域网、红外连接、通用串行线或公众网等。
1. 嵌入式移动数据库在应用中的关键
嵌入式移动数据库在实际应用中必须解决好数据的一致性(复制性)、高效的事务处理和数据的安全性等问题。
- (1)数据的一致性。嵌入式移动数据库的一个显著特点是,移动数据终端之间及与同步服务器之间的连接是一种弱连接,即低带宽、长延迟、不稳定和经常性断接。为了支持用户在弱环境下对数据库的操作,现在普遍采用乐观复制方法(Optimistic Replication 或 LazyReplication)允许用户对本地缓存上的数据副本进行操作。待网络重新连接后再与数据库服务器或其他移动数据终端交换数据修改信息,并通过冲突检测和协调来恢复数据的一致性。
- (2)高效的事务处理。移动事务处理要在移动环境中频繁的、可预见的断接情况下进行。为了保证活动事务的顺利完成,必须设计和实现新的事务管理策略和算法。
根据网络连接情况来确定事务处理的优先级,网络连接速度高的事务请求优先处理;
根据操作时间来确定事务是否迁移,即长时间的事务操作将全部迁移到服务器上执行,无须保证网络的一直畅通;
根据数据量的大小来确定事务是上载执行还是下载数据副本执行后上载;
完善的日志记录策略;
事务处理过程中,网络断接处理时采用服务器发现机制还是采用客户端声明机制;
事务移动(如:位置相关查询)过程中的用户位置属性的实时更新。
- (3)数据的安全性。许多应用领域的嵌入式设备是系统中数据管理或处理的关键设备,因此嵌入式设备上的数据库系统对存取权限的控制较严格。同时,许多嵌入式设备具有较高的移动性、便携性和非固定的工作环境,也带来潜在的不安全因素。此外,某些数据的个人隐私性又很高,因此在防止碰撞、磁场干扰、遗失、盗窃等方面对个人数据的安全性需要提供充分的保证。保证数据安全的主要措施是:
对移动终端进行认证,防止非法终端的欺骗性接入;
对无线通信进行加密,防止数据信息泄漏;
对下载的数据副本加密存储,以防移动终端物理丢失后的数据泄密。
2. 移动数据库管理系统的特性
移动 DBMS 的计算环境是传统分布式 DBMS 的扩展,它可以看做客户端与固定服务器结点动态连接的分布式系统。因此移动计算环境中的数据库管理系统是一种动态分布式数据库管理系统。由于嵌入式移动数据库管理系统在移动计算的环境下应用在嵌入式操作系统之上,所以它有自己的特点和功能需求:
- (1)微核结构,便于实现嵌入式功能。考虑到嵌入式设备的资源有限,嵌入式移动DBMS应采用微型化技术实现,在满足应用的前提下紧缩其系统结构以满足嵌入式应用的需求。
- (2)对标准 SQL 的支持。嵌入式移动 DBMS 应能提供对标准 SQL 的支持。支持SQL92 标准的子集,支持数据查询(连接查询、子查询、排序、分组等)、插入、更新、删除多种标准的 SQL 语句,充分满足嵌入式应用开发的需求。
- (3)事务管理功能。嵌入式移动 DBMS 应具有事务处理功能,自动维护事务的完整性、原子性等特性;支持实体完整性和引用完整性。
- (4)完善的数据同步机制。数据同步是嵌入式数据库最重要的特点。通过数据复制,可以将嵌入式数据库或主数据库的变化情况应用到对方,保证数据的一致性。
嵌入式移动数据库管理系统的数据同步机制应具有以下几个特点:
提供多种数据同步方式,具有上载同步、下载同步和完全同步 3 种同步方式;
具有完善的冲突检测机制和灵活的冲突解决方案,具有冲突日志记录功能;
支持快速同步,系统同步时,只传递变化的数据,节省了大量的同步时间;
支持表的水平分割和垂直分割复制,最大限度地降低了嵌入式数据库的大小;
支持异构数据源连接同步,可以用支持 ODBC 的异构数据源作为主数据库和嵌入式设备上的数据库进行数据同步;
具有主动同步的功能,允许用户对系统提供的同步事件自定义过程实现,提供了最大灵活度的同步过程。
- (5)支持多种连接协议。嵌入式移动 DBMS 应支持多种通信连接协议。可以通过串行通信、TCP/IP、红外传输、蓝牙等多种连接方式实现与嵌入式设备和数据库服务器的连接。
- (6)完备的嵌入式数据库管理功能。嵌入式移动 DBMS 应具有自动恢复功能,基本无须人工干预进行嵌入式数据库管理并能够提供数据的备份和恢复,保证用户数据的安全可靠。
- (7)平台无关性与支持多种嵌入式操作系统。嵌入式移动 DBMS 应能支持 Windows CE、Palm OS 等多种目前流行的嵌入式操作系统,这样才能使嵌入式移动数据库管理系统不受移动终端的限制。
- (8)零管理特性。嵌入式数据库具有自动恢复功能,不需要人工干预就可以进行嵌入式数据库管理,并提供数据的备份与同步。
另外,一种理想的状态是用户只用一台移动终端(如手机)就能对与它相关的所有移动数据库进行数据操作和管理。这就要求前端系统具有通用性,而且要求移动数据库的接口有统一、规范的标准。前端管理系统在进行数据处理时自动生成统一的事务处理命令,提交当前所连接的数据服务器执行。这样就有效地增强了嵌入式移动数据库管理系统的通用性,扩大了嵌入式移动数据库的应用前景。
总之,在嵌入式移动数据库管理系统中还需要考虑诸多传统计算环境下不需要考虑的问题,如对断接操作的支持、对跨区长事务的支持、对位置相关查询的支持、对查询优化的特殊考虑及对提高有限资源的利用率和对系统效率的考虑等。为了有效地解决上述问题,诸如复制与缓存技术、移动事务处理、数据广播技术、移动查询处理与查询优化、位置相关的数据处理及查询技术、移动信息发布技术、移动 Agent 等技术仍在不断地发展和完善,会进一步促进嵌入式移动数据库管理系统的发展。
12.6 实时系统与嵌入式操作系统
简单地说,实时系统可以看成对外部事件能够及时响应的系统。这种系统最重要的特征是时间性,也就是实时性,实时系统的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生这些结果的时间。
目前,大多数实时系统都是嵌入式的,并且实际运行中的嵌入式系统也都有实时性的需求,因此,在诸多类型的嵌入式操作系统中,实时嵌入式操作系统是最具代表性的一类,它融合了几乎所有类型的嵌入式操作系统的特点,所以本节主要以实时嵌入式操作系统的特性和概念为主线,对嵌入式操作系统的基本概念与特点、基本架构、内核服务、内核对象与内核服务等核心内容进行全面的介绍。
12.6.1 嵌入式系统的实时概念
现实世界中,并非所有的嵌入式系统都具有实时特性,所有的实时系统也不一定都是嵌入式的。但这两种系统并不互相排斥,兼有这两种系统特性的系统称为实时嵌入式系统。
它们之间的关系如图 12-7 所示。
- (1)逻辑(或功能)正确,是指系统对外部事件的处理能够产生正确的结果。
- (2)时间正确,是指系统对外部事件的处理必须在预定的周期内完成。
- (3)死线(Deadline)或时限、死限、截止时间,是指系统必须对外部事件进行处理的最迟时间界限,错过此界限可能产生严重的后果。通常,计算必须在到达时限前完成。
- (4)实时系统,是指功能正确和时间正确同时满足的系统,二者同等重要。换言之,实时系统有时间约束并且是时限驱动的。但是在某些系统中,为了保证功能正确性,有可能牺牲时间正确性。
对于实时系统的划分,通常还可以根据实时性的强弱,即系统必须对外部事件做出响应的时间长短,将实时系统分为:
- (1)强实时系统,其系统的响应时间非常短,通常在毫秒或微秒级。
- (2)一般实时系统,其系统响应时间比强实时系统要求要低,通常在秒级。
- (3)弱实时系统,其系统响应时间可以更长,也可以随系统负载的轻重而变化。
根据对错失时限的容忍程度或后果的严重性,可以将实时系统分为软实时系统和硬实时系统。
- (1)硬实时系统,指系统必须满足其灵活性接近零时限要求的实时系统。时限必须满足否则就会产生灾难性后果,并且时限之后得到的处理结果或是零级无用,或是高度贬值。
- (2)软实时系统,指必须满足时限的要求,但是有一定灵活性的实时系统。时限可以包含可变的容忍等级、平均的截止时限,甚至是带有不同程度的、可接受性的响应时间的统计分布。在软实时系统中,时限错失通常不会导致系统失败等严重后果。
表 12-2 是对软实时和硬实时系统的对比。
通过比较,可知由于错过时限对软实时系统的运行没有决定性的影响,一个软实时系统不必预测是否可能有悬而未决的时限错失。相反,软实时系统在探知到错失一个时限后可以启动一个恢复进程。
在实时系统中,任务的开始时间跟时限或完成时间同样重要,由于任务缺少需要的资源,如 CPU 和内存,就有可能阻碍任务执行的开始并直接导致错失任务的完成时限,因此时限问题演变成了资源的调度问题。
这一点对调度算法和任务设计都有至关重要的影响。
12.6.2 嵌入式操作系统概述
所谓嵌入式操作系统就是指运行在嵌入式计算机系统上支持嵌入式应用程序的操作系统,是用于控制和管理嵌入式系统中的硬件和软件资源、提供系统服务的软件集合。嵌入式操作系统是嵌入式软件的一个重要组成部分。它的出现提高了嵌入式软件开发的效率,提高了应用软件的可移植性,有力地推动了嵌入式系统的发展。
1. 嵌入式操作系统的特点
与通用操作系统相比,嵌入式操作系统主要有以下特点:
- (1)微型化:嵌入式操作系统的运行平台不是通用计算机,而是嵌入式计算机系统。
这类系统一般没有大容量的内存,几乎没有外存,因此,嵌入式操作系统必须做得小巧,以尽量少占用系统资源。为了提高系统的执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片中,而不是存放在磁盘等载体中。
- (2)代码质量高:在大多数应用中,存储空间依然是宝贵的资源,这就要求程序代码的质量要高,代码要尽量精简。
- (3)专业化:嵌入式系统的硬件平台多种多样,处理器更新速度快,每种都是针对不同的应用领域而专门设计。因此,嵌入式操作系统要有很好的适应性和移植性,还要支持多种开发平台。
- (4)实时性强:嵌入式系统广泛应用于过程控制、数据采集、通信、多媒体信息处理等要求实时响应的场合,因此实时性成为嵌入式操作系统的又一特点。
- (5)可裁减、可配置:应用的多样性要求嵌入式操作系统具有较强的适应能力,能够根据应用的特点和具体要求进行灵活配置和合理裁减,以适应微型化和专业化的要求。
2. 嵌入式操作系统的分类
嵌入式操作系统的种类繁多,可以从不同角度对其进行分类。
从嵌入式操作系统的获得形式上,可以分为商业型和免费型两类:
- (1)商业型。商业型嵌入式操作系统一般功能稳定、可靠,有完善的技术支持、齐全的开发工具和售后服务。如 WindRiver 公司的 VxWorks 、pSOS 和 Palm 公司的 Palm OS等。但是,价格昂贵,用户通常得不到系统的源代码。
- (2)免费型。免费型嵌入式操作系统的优势在于价格方面,另外,应用系统开发者可以获得系统源代码,给开发带来了方便。但免费型的操作系统功能简单、技术支持差、系统的稳定性也不够好。典型代表系统有嵌入式 Linux、uC/OS 等。
从嵌入式操作系统的实时性上,可以分为实时嵌入式操作系统和非实时嵌入式操作系统两类。
- (1)实时嵌入式操作系统(Real-Time Embedded OS,RTEOS)。实时嵌入式操作系统支持实时系统工作,其首要任务是调度一切可利用资源,以满足对外部事件响应的实时时限,其次着眼于提高系统的使用效率。实时嵌入式操作系统主要用在控制、通信等领域。目前,大多数商业嵌入式操作系统都是实时操作系统。
- (2)非实时嵌入式操作系统。这类操作系统不特别关注单个任务响应时限,其平均性能、系统效率和资源利用率一般较高,适合于实时性要求不严格的消费类电子产品,如个人数字助理、机顶盒等。
12.6.3 实时嵌入式操作系统
整体上看,一个嵌入式系统的实时性能是由硬件、实时操作系统及应用程序共同决定的,其中,嵌入式实时操作系统内核的性能起着关键的作用。通常,有两种类型的实时嵌入式操作系统:实时内核型的 RTEOS 与通用型的 RTEOS。
实时内核型的 RTEOS:这类操作系统,驱动程序传统嵌在内核之中,应用程序和中间件实现在标准的应用程序接口(APIs,Application Programming Interfaces)之上。
实时通用型的 RTEOS:这类操作系统,驱动程序并非深度嵌入到内核中,而是在内核之上实现,并且仅包含少数必要的驱动程序,应用程序和中间件可以直接在驱动程序之上实现,而不必在标准的 APIs 实现。它们的区别如图 12-8 所示。
实时嵌入式操作系统和通用操作系统之间的功能有很多相似之处,例如,它们都支持多任务,支持软件和硬件的资源管理,以及都为应用提供基本的操作系统服务。
1. 嵌入式实时操作系统的关键特性
与通用操作系统相比,实时嵌入式操作系统在功能上具有很多特性。实时嵌入式操作系统特有的不同于通用操作系统的关键特性主要有:
满足嵌入式应用的高可靠性;
满足应用需要的可裁减能力;
内存需求少;
运行的可预测性;
采用实时调度策略;
系统的规模紧凑;
支持从 ROM 或 RAM 上引导和运行;
对不同的硬件平台均有更好的可移植性。
2. 嵌入式实时操作系统的实时性能指标在评估实时操作系统设计性能时,时间性能指标是最重要的一个性能指标,常用的时间性能指标主要有如下几个:
- (1)任务切换时间:是指 CPU 控制权由运行态的任务转移给另外一个就绪任务所需要的时间,包括在进行任务切换时,保存和恢复任务上下文所花费的时间及选择下一个待运行任务的调度时间,该指标跟微处理器的寄存器数目和系统结构有关。相同的操作系统在不同微处理器上运行时所花费的时间可能不同。
任务切换时间所对应的时序图如图 12-9 所示。
- (2)中断处理相关的时间指标,对应的中断时序图如图 12-10 所示。
中断延迟时间,是指从中断发生到系统获知中断的时间,主要受系统最大关中断时间的影响,关中断时间越长,中断延迟也就越长;
中断处理执行时间,该时间由具体的应用决定;
中断响应时间,是指从中断发生到开始执行用户中断服务例程的时间;
中断恢复时间,是指用户中断服务例程结束回到被中断的代码之间的时间;
最大关中断时间,包含两个方面:一是内核最大关中断时间,即内核在执行临界区代码时关中断;二是应用关中断时间,关中断最大时间是这两种关中断时间的最大值;
任务响应时间,是指从任务对应的中断产生到该任务真正开始运行的时间;
对于可抢占式调度,中断恢复的时间还要加上进行任务切换和恢复新的任务上下文的时间。
- (3)系统响应时间:指系统在发出处理请求到系统做出应答的时间,即调度延迟,这个时间的大小主要由内核任务调度算法所决定。
作为总结,典型的可抢占实时内核的性能指标计算方法如表 12-3 所示。
12.6.4 主流嵌入式操作系统介绍
迄今为止,据不完全统计,世界上现有的嵌入式操作系统的总数达几百个之多。其中最常用的有十几种,这些操作系统在各自的应用领域都有很高的知名度和广大的用户群。
表 12-4 选取了一些业界常见的嵌入式操作系统加以比较。
12.7 嵌入式系统开发设计
嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍,同时还要满足某些设计指标,并使其他的设计指标也同时达到最佳化。
嵌入式系统的设计方法跟一般的硬件设计、软件开发的方法不同,是采用硬件和软件协同设计的方法,开发过程不仅涉及软件领域的知识,还涉及硬件领域的综合知识,甚至还涉及机械等方面的知识。要求设计者必须熟悉并能自如地运用这些领域的各种技术,才能使所设计的系统达到最优。
虽然嵌入式系统应用软件的设计方案随应用领域的不同而不同,但是嵌入式系统的分析与设计方法也遵循软件工程的一般原则,许多成熟的分析和设计方法都可以在嵌入式领域得到应用。嵌入式系统的开发过程同样也包括需求分析、系统设计、实现和测试几个基本阶段,并且每个阶段都有其独有的特征和重点。
本节主要介绍嵌入式系统开发设计的技术与方法,并从嵌入式系统应用和计算模型的角度分析应用软件设计的方法及设计过程中面临的主要问题。最后,讨论嵌入式领域软件移植的相关问题。
12.7.1 嵌入式系统设计概述
进行嵌入式系统设计前,应明确嵌入式系统设计本身的特点及衡量嵌入式系统设计的一些主要的技术指标。
1. 嵌入式系统设计的特点
与通常的系统设计相比,嵌入式系统设计具有以下特点:
软、硬件协同并行开发;
微处理器的类型多种多样;
实时嵌入式操作系统具有多样性;
与通用系统开发相比,可利用系统资源很少;
应用支持少;
要求特殊的开发工具;
软、硬件都要很健壮;
调试很困难。
2. 嵌入式系统的技术指标
嵌入式系统设计的常用指标有:
- (1)NRE 成本(非重复性工程成本):设计系统所需要支付的一次性货币成本,即一旦设计完毕,不需要支付额外的设计费用,就可以制造任意数目的产品。
- (2)单位成本:生产单个产品所需要支付的货币成本,不包含 NRE 成本。
- (3)大小:指系统所占的空间,对软件而言,一般用字节数来衡量;对硬件而言,则用逻辑门或晶体管的数目来衡量。
- (4)性能:系统完成规定任务所需要的时间,是设计时最常用的设计指标,主要有两种衡量方式,一是响应时间,即开始执行到任务结束之间的时间。二是完成量,即单位时间内所完成的任务量。
- (5)功率:系统所消耗的功率,它决定了电池的寿命或电路的散热需求。
- (6)灵活性:在不增加 NRE 成本的前提下,改变系统功能的能力。
- (7)样机建立时间:建立系统可运行版本所需的时间,系统样机可能比最终产品更大更昂贵,但可以验证系统的用途和正确性,改进系统的功能。
- (8)上市时间:从系统开发到可以上市卖给消费者的时间,最主要的影响因素包括设计时间、制造时间和检测时间。
- (9)可维护性:系统推出或上市后进行修改的难易程度,特别是针对非原始开发人员进行的修改。
- (10)正确性:正确实现了系统的功能,可以在整个设计过程中检查系统的功能,也可以插入测试电路检验是否正确。
- (11)安全性:系统不会造成伤害的概率。各个设计指标之间一般是互相竞争的,改良了某个指标常常会导致其他指标的恶化,
为了最好地满足设计最佳化,设计者必须了解各种软、硬件的实现技术,并且能够从一种技术转移到另一种技术,以便找到特定约束下的最佳方案。
3. 嵌入式系统的设计挑战
嵌入式系统设计所面临的挑战有以下几个方面。
- (1)需要多少硬件:设计者对用于解决问题的计算能力有较强的控制能力,不仅可以选择使用何种处理器,而且可以选择存储器的数量、所使用的外设等,因为设计不仅要满足性能的需求,还要受到制造费用的约束,硬件的选择十分重要,硬件太少,将达不到功能和性能的要求,硬件过多又会使产品过于昂贵。
- (2)如何满足时限:使用提高处理器速度的方法使程序运行速度加快来解决时间约束的方法是不可取的,因为这样会使系统的价格上升。同时,提高了处理器的时钟频率,有时并不能提高执行速度,因为程序的速度有可能受存储系统的限制。
- (3)如何减少系统的功耗:对采用电池供电的系统,功耗是一个十分敏感的问题。对于非电池供电的系统,高功率意味着高散热。降低系统功耗的一种方法是降低它的运算速度,但是单纯地降低运算速度显然会导致性能不能满足,因此,必须认真设计在降低功耗的同时满足性能的约束。
- (4)如何保证系统的可升级性:系统的硬件平台可能使用几代,或者使用同一代的不同级别的产品,这些仅需要一些简单的改变,设计者必须通过改变软件来改变系统的特性,设计一种机器使它能够提供现在仍未开发的软件的性能。
- (5)如何保证系统的可靠性:可靠性是产品销售时一项重要的指标,产品能够很好地工作是消费者的合理要求,可靠性在一些系统中尤为重要,如安全控制系统。
- (6)测试的复杂性:测试一个嵌入式系统比仅仅输入一些数据困难得多,所以不得不运行整台机器以产生正确的数据,数据产生的时间是十分重要的,即不能离开嵌入式系统工作的整个环境来测试嵌入式系统。
- (7)可视性和可控制性有限:嵌入式系统通常没有显示设备和键盘,这将导致开发者很难了解系统内部发生了什么,也不能响应系统的动作,有时候不得不通过观察微处理器的信号来了解。在实时系统中,一般无法为了观察而让系统停机。
- (8)开发环境受限:嵌入式系统的开发环境,如开发软件、硬件工具通常比通用计算机或工作站上的可用环境更为有限,故只能采用交叉式开发,给开发进度带来很大影响。
12.7.2 开发模型与设计流程
与通用系统的开发类似,嵌入式系统的开发也可以采用软件工程中常见的开发模型,主要包括瀑布模型、螺旋模型、逐步求精模型及层次模型。
1. 常用开发模型
设计流程是系统设计期间应遵循的一系列步骤,其中一些步骤可以由自动化工具完成,而另外一些只可用手工完成。在嵌入式系统领域,有如下几种常用开发过程模型。
- (1)瀑布模型。瀑布模型由五个主要阶段构成:需求分析阶段确定目标系统的基本特点;系统结构设计阶段将系统的功能分解为主要的构架;编码阶段主要进行程序的编写和调试;测试阶段检测错误;最后一个是维护阶段,主要负责修改代码以适应环境的变化,并改正错误、升级。各个阶段的工作和信息总是由高级的抽象到较详细的设计步骤单向流动,是一个理想的自顶向下的设计模型。
- (2)螺旋模型。螺旋模型假定要建立系统的多个版本,早期的版本是一个简单的试验模型,用于帮助设计者建立对系统的直觉和积累开发此系统的经验,随着设计的进展,会创建更加复杂的系统。在每一层设计中,设计者都会经过需求分析、结构设计、测试三个阶段。
在后期,当构成更复杂的系统版本时,每一个阶段都会有更多的工作,并需要扩大设计的螺旋,这种逐步求精的方法使设计者可以通过一系列的设计循环加深对所开发的系统的理解。
螺旋的顶部第一个循环是很小很短的,而螺旋底部的最后的循环加入了对螺旋模型的早期循环的细节补充,螺旋模型比瀑布模型更加符合实际。
- (3)逐步求精模型。逐步求精模型是一个系统被建立多次,第一个系统被作为原型,其后逐个将系统进一步求精。当设计者对正在建造的系统的应用领域不是很熟悉时,这个方法很有意义。通过建造几个越来越复杂的系统,从而精炼系统,使设计者能检验架构和设计技术。此外,各种迭代技术也可仅被局部完成,直到系统最终完成。
- (4)层次模型。许多嵌入式系统本身是由更多的小设计组成的,完整的系统可能需要各种软件构件、硬件构件。这些部件可能由尚需设计的更小部件组成,因此从最初的完整系统设计到为个别部件的设计,设计的流程随着系统的抽象层次的变化而变化,从最高抽象层次的整体设计到中间抽象层次的详细设计,再到每个具体模块的设计,都是逐层展开的,其中每个流程可能由单个设计人员或设计小组来承担,每个小组依靠其他小组的结果,各个小组从上级小组获得要求,同时上级小组依赖于各个分组设计的质量和性能。而且,流程的每个实现阶段都是一个从规格说明到测试的完整流程。
2. 嵌入式系统的设计方法
一个良好的嵌入式系统设计方法是十分重要的,这是因为:
- (1)良好的设计方法可以使设计者清楚地了解他们所做工作的进度,这样可以确保不遗漏其中的任何一项工作。
- (2)允许使用计算机辅助工具帮助设计者进行工作,将整个过程分成几个可控的步骤进行。
- (3)良好的设计方法方便设计团队的成员之间相互交流,通过定义全面的设计过程,使团队里的每个成员可以很好地理解他们所要做的工作及完成分配给他们的任务时所达到的目标。
嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。
项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。
希赛教育专家提示:由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。
程序建立阶段的工作是根据详细设计阶段产生的文档进行的。这一阶段的工作主要是源代码编写、编译、链接等几个子过程,这些工作都是在宿主机进行的,不需要用到目标机。
产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用可用的几种调试方法之一或它们的有效组合来进行。
嵌入式系统设计不同于传统的软件设计,如图 12-11 所示。经常包含硬件设计和软件设计,其中前端活动,如规格说明和系统架构,需要同时考虑硬件和软件两个方面。
类似的,后端设计,如系统集成和测试要考虑整个系统。在中间阶段中,软件和硬件构件的开发彼此相互独立,并且大多数的硬件和软件的工作能够相对独立地进行。最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件上配置的不同,固化有几种方式,可以固化在 EPROM 和 FLASH 等存储器中,也可固化在 DOC 和 DOM 等电子盘中。通常还要借助一些专用编程器进行。
由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。
在系统开发流程的各个阶段,分别要进行系统的确认和性能评估、安全性评估及风险性评价,并对系统的实现进行测试验证。
12.7.3 嵌入式系统设计的核心技术
嵌入式系统的开发是软、硬件综合开发,与通用系统的开发存在巨大差异,一方面是因为每个嵌入式系统都是一个软硬件的结合体;另一方面,嵌入式系统一旦研制完成,软件便随着硬件固化到产品中,具有很强的专用性。在这些特点的影响下,必然要有一种不同于通用软件开发过程的工程方法学来支持嵌入式系统的开发过程,同时,这些特点也决定了嵌入式系统开发所采用的独特的核心技术。
总体来看,在嵌入式开发领域,主要有三种核心技术:处理器技术、IC 技术、设计/ 验证技术。
1.处理器技术
处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其他处理器不同。
- (1)通用处理器。这类处理器可用于不同类型的应用,一个重要的特征就是存储程序,由于设计者不知道处理器将会运行何种运算,所以无法用数字电路建立程序。另一个特征就是通用的数据路径,为了处理各类不同的计算,数据路径是通用的,其数据路径一般有大量的寄存器及一个或多个通用的算术逻辑单元。设计者只需要对处理器的存储器编程来执行所需的功能,即设计相关的软件。
在嵌入式系统中使用通用处理器具有设计指标上的一些优势。上市时间和 NRE 成本较低,因为设计者只需编写程序,而不需做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。
当然,这种方式也有一些设计指标上的缺陷,数量大时单位成本相对较高,因为数量大时,自行设计的 NRE 成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功耗可能变大。
- (2)单用途处理器。单用途处理器是设计用于执行特定程序的数字电路,也指协处理器、加速器、外设等。如 JPEG 编码解码器执行单一程序,压缩或解压视频信息。嵌入式系统设计者可通过设计特定的数字电路来建立单用途的处理器。设计者也可以采用预先设计好的商品化的单用途处理器。
在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时单位成本可能较低,而设计时间与 NRE 成本可能较高,灵活性较差,数量小时单位成本较高,对于某些应用,性能不如通用处理器。
- (3)专用处理器。专用指令集处理器是一个可编程处理器,针对某一特定类型的应用进行最优化。这类特定应用具有相同的特征,如嵌入式控制、数字信号处理等。在嵌入式系统中使用专用处理器可以在保证良好的性能、功率和大小的情况下,提供更大的灵活性,但这类处理器仍需要昂贵的成本建立处理器本身和编译器。单片机和数字信号处理器是两类应用广泛的专用处理器,数字信号处理器是一种针对数字信号进行常见运算的微处理器,而单片机是一种针对嵌入式控制应用进行最佳化的微处理器。
2. IC 技术
从系统的集成电路设计描述得到实际芯片的物理映射过程的实现技术便是 IC(Integrated Circuits,集成电路)技术,当前在半导体领域的三类实现技术,即全定制、半定制和可编程技术均可应用于嵌入式系统的硬件设计。
- (1)全定制/VLSI(Very Large Scale Integrated Circuites,超大规模集成电路)。在全定制IC 技术中,需要根据特定的嵌入式系统的数字实现来优化各层设计人员从晶体管的版图尺寸、位置、连线开始设计以达到芯片面积利用率高、速度快、功耗低的最优化性能。利用掩膜在制造厂生产实际芯片,全定制的 IC 设计也常称为 VLSI,具有很高的 NRE 成本、很长的制造时间,适用于大量或对性能要求严格的应用。
- (2)半定制/ASIC(Application Specific Integrated Circuit,专用集成电路)。半定制 ASIC是一种约束型设计方法,包括门阵列设计法和标准单元设计法。它是在芯片制作好一些具有通用性的单元元件和元件组的半成品硬件,设计者仅需要考虑电路的逻辑功能和各功能模块之间的合理连接即可。这种设计方法灵活方便、性价比高,缩短了设计周期,提高了成品率。
- (3)可编程/ASIC。可编程器件中所有各层都已经存在,设计完成后,在实验室里即可烧制出设计的芯片,不需要 IC 厂家参与,开发周期显著缩短。可编程 ASIC 具有较低的 NRE成本,单位成本较高,功耗较大,速度较慢。
3. 设计/验证技术
嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。
芯片级设计技术的核心是编译/综合、库/IP(Intellectual Property,知识产权)、测试/ 验证。编译/综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。
库/IP 技术将预先设计好的低抽象级实现用于高级抽象。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。
软件设计技术的核心是软件语言。软件语言经历了从低级语言(机器语言、汇编语言)
到高级语言(例如,结构化设计语言、面向对象设计语言)的发展历程,推动其发展的是汇编技术、分析技术、编译/解释技术等诸多相关技术。软件语言的级别也从实现级、设计级、功能级逐渐向需求级语言发展过渡。
早期,随着通用处理器概念的逐渐形成,软件技术迅速发展,软件的复杂度也开始增加,软件设计和硬件设计的技术和领域完全分开。设计技术和工具在这两个领域同步得到发展,也使得行为描述可以在越来越抽象的级别上进行,以适应设计复杂度不断增长的需要。这种同步发展如今又使得这两个领域都使用同样的时序模型来描述行为,因而这两个领域即将可能再度统一为一个领域。
鉴于大多数嵌入式系统都是实时的反应式系统,反应式系统具有多任务并发、时间约束严格与可靠性高的特点,针对反应式系统的设计和描述,人们相继提出了多种描述语言和验证方法学。例如,采用时序逻辑用来刻画反应式系统的性质及推理反应式系统的行为,采用模型检验技术验证反应式系统设计的正确性等,这些技术已逐步在嵌入式开发过程中发挥着重要的作用。
12.7.4 嵌入式开发设计环境
嵌入式系统的开发环境种类很多,大体可以把它们分为如下几类:
- (1)与嵌入式操作系统配套的开发环境,属于这一类的开发环境较多,如 PalmOS、THOS、VxWorks、Windows CE 等商业嵌入式操作系统都有与其配套的功能齐全的开发环境。
- (2)与处理器芯片配套的开发环境。这类开发环境一般由处理器厂商提供,如EPSON公司推出的一个专门为基于 S1C33 系列微控制器芯片的嵌入式系统开发的工具包便是这一类型的开发环境。
- (3)与具体应用平台配套的开发环境。这类开发环境针对性较强,如高通公司的 BrewSDK 等。
- (4)其他类的开发环境。这类开发环境主要指一些嵌入式系统供应商在 GNU 开源工具的基础上开发或定制的较为通用的开发环境。这类工具可以免费获得,而且支持的处理器类型繁多,功能齐全,但在技术支持方面比专业化商业工具略逊一些。
12.7.5 嵌入式软件设计模型
随着嵌入式系统的功能日益复杂,要描述这些功能复杂的系统的行为也越来越困难,实践证明通过采用计算模型的方法来对系统进行描述和分析是一种具有工程价值的方法。
本节介绍几种嵌入式领域常用的计算模型,并从计算模型的角度分析和阐述嵌入式应用设计和开发的相关问题。计算模型提供一组用简单对象来组合复杂行为的方法,可以帮助设计者理解和描述系统行为。嵌入式系统常用的计算模型有如下几种:时序计算模型、通信进程模型、状态机模型、数据流模型、面向对象模型、并发进程模型。
这些模型分别在不同的应用领域使用,如状态机模型特别适合描述以控制为主的系统,数据流模型可以很好地描述数据处理和转换问题。目前使用最广泛的是并发进程模型。
1. 状态机模型
有限状态机(Finite-State Machine,FSM)是一个基本的状态模型,可以用一组可能的状态来描述系统的行为,系统在任何时刻只能处于其中一个状态,也可以描述由输入确定的状态转移,最后可以描述在某个状态下或状态转移期间可能发生的操作。
有限状态机 FSM 是一个六元组 F,其中 S 是一个状态集合{s0, s1,…,sl},I 是输入集合{I0,I1,…,Im},O 是输出集合{o0,o1,…,on},F 是次态函数或转移函数,将状态和输入映射到状态(S×I→S),H 是输出函数,将状态映射到输出 (S→O),S0 是初始状态。
图 12-12 是电梯的控制单元的状态机描述。在初始“空闲”态,将 up 和 down 设置为 0, open 设置为 1。在所请求的楼层不同于当前楼层之前,状态机一直停留在“空闲”
状态。如果所请求的楼层大于当前楼层,则状态机转移到“上升”状态,并将 up 设置为 1。
如果所请求的楼层小于当前楼层,则状态机转移到“下降”状态,并将 down 设置为 1。
在当前楼层等于所请求的楼层之前,状态机一直留在“下降”或“上升”状态,然后状态转移到“开门”状态,并将 open 设置为 1。通常,系统有一个计时器 timer,因此,当状态机转移到“开门”状态时,还要将计时器启动,状态机停留在“开门”态,直到计时器超时,最后转移到“空闲”态。
当 FSM 被用于嵌入式系统设计时,其输入和输出的数据类型都是布尔类型,而函数表示含有布尔运算的布尔函数,这种模型对于没有数据输入或输出的很多纯控制系统而言已经足够。如果要处理数据,则将 FSM 扩展为带有数据路径的状态机(FSM with Datapath,FSMD)。另外,对状态机模型可以进一步扩展以支持分级和并发,这种模型称为分级/并发FSM(Hierarchical/Concurrent FSM,HCFSM)模型。
2. 数据流模型
数据流模型是并发多任务模型派生出的一种模型,该模型将系统的行为描述为一组结点和边,其中结点表示变换,边表示从一个结点到另一个结点的数据流向。每个结点使用来自其输入边的数据,执行变换并在其输出边上产生数据。
每条边可能有或没有数据,出现在边上的数据称为令牌,当某个结点的所有输入边都至少有一个令牌时,该结点可触发。结点触发后,将使用来自每条输入边的一个令牌,对所有使用的令牌进行数据变换,并在输出边上产生一个令牌,结点的触发仅决定于令牌出现的情况。
图 12-13 所示是计算 z=(a+b)×(c-d)的数据流模型。
目前,已有若干商业化的工具支持用图形化语言表达数据流模型,这些工具可以自动将数据流模型转换为并发多任务模型,以便在微处理器上实现。其转换方法为将每个结点转换为一个任务,每条边转换为一个通道,其中并发多任务模型的实现方法是使用实时操作系统对并发任务进行映射。
图 12-14 是一个同步数据流模型,这个模型中,在结点的每条输入边和输出边上分别标注每次触发所使用和产生的令牌数。该模型的优点是,在实现时不需要将其转换为并发多任务模型,而是用静态方式调度结点,产生时序程序模型。该模型可以使用时序程序语言(如C 语言)来表达,不需要实时操作系统就可以执行,因此其执行效率更高。
3.并发进程模型
并发进程模型是由一组进程构成,每个进程是一个顺序执行的过程,各进程间可以并发执行。并发进程模型提供创建、终止、暂停、恢复和连接进程的操作。进程在执行中可以相互通信,交换数据。进程间通信可以采用两种方式:共享变量和消息传递。信号量、临界区、管程和路径表达式等用来对并发进程的操作进行同步。
通常,实时系统可以看成是由许多并发执行的进程构成的系统,其中每个进程都有时间要求。这样,很多嵌入式系统更容易用一组并发执行的任务来描述,因为这些系统本身就是多任务系统,并发进程模型便自然地可以由实时操作系统的多任务来实现。
4. 面向对象模型
传统的并发进程模型是围绕进程的概念进行设计的,进程是一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和理解。
面向对象模型以一种更加直接的方式刻画客观世界中的活动,模型中存在着潜在的并发执行能力。一个对象向另一个对象发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消息,消息发送者和消息接受者可以并发执行。对象不都是处于被动的提供服务状态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处理。一个对象往往可以同时处理多个消息。
对象是数据和操作的封装体,数据存放在对象的局部变量中,对象的状态由对象所有的局部变量在某一时刻的取值来表示。在并发环境中,还要考虑对象并发状态的描述问题,因为对象的并发控制是根据对象的并发状态来进行的。
把并发与面向对象相结合,归结起来可分为两条途径:
- (1)在面向对象模型中引进并发机制,充分利用面向对象技术刻画客观世界的良好模型能力和面向对象的各个重要特性,同时把其潜在的并发能力描述出来,使其适合于描述并发计算。
- (2)在传统并发模型中引进面向对象思想。
面向对象的并发模型可以分为两种类型:隐式并发模型和显式并发模型。
- (1)隐式并发模型。这种模型的特点是推迟并发设计,将对象建模作为建模基础。在进入运行阶段之前,将对象看成自主单元,各种对象的活动看成理想并发方式完成的特定工作。就像每个对象拥有一个自己的处理器,这个处理器可以为对象提供一个执行线程。进入系统的外部事件被看成一个处理请求,以广播方式传给一些对象,这些对象接着向其他对象进一步提出处理请求。理论上,对应一个请求,可以有任意多个对象执行相应的处理。在实现时,由调度程序最终决定其对象的操作顺序,如图 12-15 所示。
- (2)显式并发模型。这种模型的特点是首先考虑并发,应先把并发概念和对象概念分开。
在建立对象以后,用实时操作系统支持的进程概念来表示并发,形成对象和进程两个抽象层次,即先将系统分解为准并发进程作为开始,而在每个进程的内部采用面向对象的技术。对象间交互表示成嵌套的函数调用,通过加入锁、监视器、信号量等显式同步机制,来保证对象的完整。该模型将进程置于对象之上,对象中不必考虑并发、对象串行化,如图 12-16 所示。
早期,实时系统的设计方法主要是结构化设计方法,采用结构化方法的系统在复用性、可修改性等方面有很大的局限性。面向对象的实时系统设计方法显然在这些问题上具有明显的优势。较实用的面向对象的设计方法是诺基亚公司的 OCTOPUS 方法,该方法以 OMT 和融合方法(Fusion Method)为基础,提出了对实时系统响应时间、时间域及并发的处理方法,并具体提出了对并发、同步、通信、中断处理、ASIC、硬件界面、端对端响应时间等方面的处理。OCTOPUS 方法将软件开发的主要阶段很好地合并起来,从规格说明到运行模型之间的过渡紧密自然,还支持渐进式开发。OCTOPUS 方法是当前面向对象技术和实时系统相结合的一个典型的设计方法。另外,形式化的面向对象的开发技术和建模语言也逐渐在实时系统建模的初始阶段得到应用。
12.7.6 需求分析
在设计之前,设计者必须知道要设计什么。通常人们用需求和规格说明来描述设计过程的这两个相关而不同的步骤。需求是用户所想要的非形式化的描述,而规格说明是可以用来创建系统架构的更详尽、更精确、更一致的描述。当然,需求和规格说明都是指导系统的外部表示,而非内部表示。需求有两种类型:功能性需求和非功能性需求,功能性需求说明这个系统必须做什么,而非功能性需求说明系统的其他属性,如物理尺寸、价格、功耗、设计时间、可靠性等。
对一个大系统进行需求分析是一项复杂而费时的工作,但是,获取少量格式清晰、简单明了的信息是理解系统需求的一个良好开端。表 12-5 是在某项工程开始时填写的需求表格,在考虑系统的基本特征时可将该表格作为检查表。
这份需求表格内容是以 GPS(Global Position System,移动地图系统)为例编写的。移动地图系统是一种手持设备,针对在高速公路开车的用户或类似的用户而设计,该设备可从GPS 上得到位置信息,为用户显示当前所在的位置及周围的地形图,地图的内容随着用户及设备所在位置的改变而改变。
需求分析阶段最重要的文档输出就是系统的规格说明。
规格说明是精确反映客户需求并且作为设计时必须遵循的要求的一种技术文档。在软件开发的过程中,规格说明非常重要。系统分析人员接受用户需求产生目标软件系统的规格说明,设计与编码人员根据规格说明,进行模块设计并最终产生程序代码,测试和验收人员验证最终软件是否符合规格说明。规格说明应该是清晰的、无歧义的,否则由该规格说明建造系统可能不符合实际要求。
目前,业界较为流行的方法是采用 UML 进行规格说明的描述。UML 是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。UML 适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。
图 12-17 是一个显示操作的状态机规格说明示例,开始和结束是特殊的状态,状态机中的状态代表了不同的概念性操作。
在需求分析阶段,通过用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类及它们相互间的关系,并用 UML 类图来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。
12.7.7 系统设计
目前,嵌入式系统的设计工具可以分为两类:协同合成工具和协同模拟工具。
- (1)协同合成工具。当前,用于嵌入式开发的主要的协同合成工具有 POLIS、COSYMA和 Chinook 等。
POLIS:POLIS 是 UC-Berkeley 开发的交互式嵌入式系统的软、硬件协同设计框架,它适用于小型控制系统的设计,系统描述支持基于 FSM(Finite State Machine)的语言。由于软、硬件均可透明地从同一 CFSM 描述中取得,设计空间的灵活性也相应增加,支持使用PTOLEMY 的协同模拟,在描述及实现层均支持正式的验证,架构的支持受限,即硬件 CFSMs所包围的只有一个处理器,而且不支持共享内存。
COSYMA:COSYMA 是由德国 IDA 公司开发的一种探索硬件与软件协同设计合成进程的平台,它面向软件系统的描述较简单,支持自动分割和协同处理器合成,在合成时期可以对设计空间进行探索,系统合成取决于硬件限制,不支持并发模块,即一次只能有一个线程执行,架构同样受限,不支持正式验证,设计的成功与否取决于分割及开销估计技术。
Chinook:Chinook 是为控制系统而设计的,整个系统的描述作为一个输入提供给 Chinook,它的内部模式基于类似等级状态的模式,它不对代码进行分割,它为整个设计提供单一的模拟环境,Chinook 支持多种系统架构,尤其是多处理器结构。同样支持定时限制的描述,它能合成多种接口,包括系统之间的软、硬件接口,能直接从定时图表中合成设备驱动器,可以控制处理器之间的通信。
- (2)协同模拟工具。协同模拟是嵌入式系统设计中至关重要的一个方面,在整个系统设计完成后,在统一框架下模拟不同种类的成分是必要的,协同模拟不仅提供检验,而且为用户提供各系统的性能信息,这有助于在系统的早期提出变更方案,不至于造成重大损失。
目前,主要的协同模拟工具有如下两种。
PTOLEMY:PTOLEMY 的关键思想是混合使用面向对象内核的计算模型,可用于模拟多种的系统,在各种应用中被广泛地使用,但不适合于系统合成,硬件模拟也是它的一项功能。
TSS:TSS(Tool for System Simulation)是模拟复杂硬件的工具,采用 C 语言编写,单个模块的提取可由用户控制,可以方便地进行添加与删除模块。但不支持分级模块,没有用于同步各处理器存取共享数据结构的机制,模块间的通信通过端口和总线进行。并且,TSS 支持多核系统的模拟。
1. 系统架构设计
描述系统如何实现规格说明中定义的功能是系统架构设计的主要目的。但是在设计嵌入式系统的系统结构时,很难将软件和硬件完全分开。通常的处理是先考虑系统的软件架构,然后再考虑其硬件实现。系统结构的描述必须符合功能上和非功能上的需求。不仅所要求的功能要体现,而且成本、速度、功耗等非功能约束也要满足。从系统原始框图中的功能元素开始逐个考虑和细化,把原始框图转化为软件和硬件系统结构的同时考虑非功能约束,是一个切实可行的方法。下面以 GPS 移动地图系统的架构设计为例进行说明。
- (1)原始框图。如图 12-18 所示,这个原始框图是移动地图系统的主要操作和数据流。
- (2)软件系统架构。如图 12-19 所示,软件系统主要由用户界面、数据库搜索引擎和数据转换器组成。
- (3)硬件系统架构。如图 12-20 所示,硬件系统采用通用微处理器、存储器和 I/O 设备组成。本系统选用两种存储器:通用数据、程序存储器和针对像素显示的帧缓冲存储器。
2. 硬件子系统设计
嵌入式系统的开发环境由 4 部分组成:目标硬件平台、嵌入式操作系统、编程语言和开发工具,其中处理器和操作系统的选择应当考虑更多的因素,避免错误的决策影响项目的进度。
- (1)选择处理器技术。嵌入式系统设计的主要挑战是如何使互相竞争的设计指标同时达到最佳化。设计者必须对各种处理器技术和 IC 技术的优缺点加以取舍。一般而言,处理器技术与 IC 技术无关,也就是说,任何处理器技术都可以使用任何 IC 技术来实现,但是最终器件的性能、NRE 成本、功耗、大小等指标会有很大的差异,如图 12-21 所示。
更通用的可编程技术提供了较大的灵活性,降低了 NRE 成本,建立产品样机与上市的时间较快。定制的技术能够提供较低的功耗、较好的性能、更小的体积和大批量生产时的低成本。
通常,一个公司要推出一种产品,如机顶盒、家庭路由器或通用处理器等,可以先推出半定制产品,以尽快占领市场,然后再推出全定制的产品。也可先用较可靠的老技术实现处理器,再用新制程的技术实现下一代。同样,嵌入式系统的设计者可以使用可编程的器件来建立样机,以加速上市时间,批量时再采用定制器件。
根据这些原则,设计者便可以对采用的处理器技术和处理器做出合理选择。一般,全定制商品化的“通用处理器软件”是大多数情况下都适用的一个选择。
- (2)通用嵌入式处理器的选择。根据用户的需求和项目的需要选择合适的通用嵌入式处理器,选择时需要考虑如下指标。
处理器的速度。一个处理器的性能取决于多个方面的因素:时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和 I/O 子系统。处理器的性能满足系统的需求,并有一定的余量,但也不必选得太高。
技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,从而减少了芯片的数量,进而降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无须过多的组合逻辑就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如 DMA 控制器、内存管理器、中断控制器、串行设备、时钟等的配套。
开发人员对处理器的熟悉程度,即项目的开发人员需要在处理器本身的成本和开发成本之间做一个权衡。
处理器的 I/O 功能是否满足系统的需求,即许多处理器提供内置的外部设备,以减少芯片数量、降低成本,应尽量考虑这种方案。
处理器的相关软件支持工具,即该款处理器是否具有完善的嵌入式操作系统、编程语言和开发工具的支持等。
处理器的调试,即处理器是否集成了调试功能,如是否支持 JTAG、BDM 等调试方式。
处理器制造商的支持可信度。在产品的生命周期里选择某种处理器时,设计者必须确认它有足够的供货量、技术支持等处理器的低功耗。
嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS 导航器、智能家电等消费类电子产品,这些产品中选购的微处理器的典型特点是要求高性能、低功耗。许多 CPU 生产厂家已经进入了这个领域。
- (3)硬件设计的注意事项。首先,将硬件划分为部件或模块,并绘制部件或模块连接框图。其次,对每个模块进行细化,把系统分成更多个可管理的小块,可以被单独实现。通常,系统的某些功能既可用软件实现也可用硬件实现,没有一个统一的方法指导设计者决定功能的软硬件分配,但是可以根据约束清单,在性能和成本之间进行权衡。
设计软、硬件之间的接口时,需要硬件设计者和软件设计者协同工作才能完成,良好的接口设计可以保证硬件简洁、易于编程。
设计时需要注意以下几点。
I/O 端口:列出硬件的所有端口、端口地址、端口属性、使用的命令和序列的意义、端口的状态及意义。
硬件寄存器:对每个寄存器设计寄存器的地址、寄存器的位地址和每个位表示的意义,以及对寄存器读写的说明、使用该寄存器的要求和时序说明。
内存映射:共享内存和内存映射 I/O 的地址,对每个内存映射,说明每个 I/O 操作的读/写序列、地址分配。
硬件中断:如何使用硬件中断,列出所使用的硬件中断号和分配的硬件事件。
存储器空间分配:列出系统中程序和数据占用的空间大小、位置,以及存储器类型和访问方式等。
总之,硬件设计者应该给软件设计者更多、更详细的信息,以便于进行软件设计和开发。
3. 软件子系统设计
根据需求分析阶段的规格说明文档,确定系统计算模型,对软件部分进行合理的设计即可。
- (1)操作系统的选择。在选择嵌入式操作系统时,需要做多方面的考虑:
操作系统的功能。根据项目需要的操作系统功能来选择操作系统产品,要考虑系统是否支持操作系统的全部功能或部分功能,是否支持文件系统、人机界面,是实时系统还是分时系统及系统是否可裁减等因素。
配套开发工具的选择。有些实时操作系统(rtos)只支持该系统供应商的开发工具。也就是说,还必须向操作系统供应商获取编译器、调试器等。有些操作系统使用广泛且有第三方工具可用,因此,选择的余地比较大。
操作系统的移植难易程度。操作系统到硬件的移植是一个重要的问题。它是关系到整个系统能否按期完工的一个关键因素,因此要选择那些可移植性程度高的操作系统,从而避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。
操作系统的内存需求如何。均衡考虑是否需要额外 ram 或 eeprom 来迎合操作系统对内存的较大要求。有些操作系统对内存的要求是与目标相关的。如 tornado/vxworks,开发人员能按照应用需求分配所需的资源,而不是为操作系统分配资源。从需要几 k 字节存储区的嵌入设计到需求更多的操作系统功能的复杂的高端实时应用,开发人员可任意选择多达 80种不同的配置。
操作系统附加软件包。是否包含所需的软件部件,如网络协议栈、文件系统、各种常用外设的驱动等。
操作系统的实时性如何。实时性分为软实时和硬实时。有些嵌入式操作系统只能提供软实时性能,如 microsoft windows ce 2.0 是 32 位,windows 兼容,微内核,可伸缩实时操作系统,可以满足大部分嵌入式和非嵌入式应用的需要。但实时性不够强,属于软实时嵌入式操作系统。
操作系统的灵活性如何。操作系统是否具有可剪裁性,即能否根据实际需要进行系统功能的剪裁。有些操作系统具有较强的可剪裁性,如嵌入式 linux 、 tornado/vxworks 等。
- (2)编程语言的选择。在选择编程语言时,也需要做多方面的考虑:
通用性。随着微处理器技术的不断发展,其功能越来越专用,种类越来越多,但不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现,而高级语言一般和具体机器的硬件结构联系较少,比较流行的高级语言对多数微处理器都有良好的支持,通用性较好。
可移植性。由于汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,因此,移植性差。高级语言对所有微处理器都是通用的,因此,程序可以在不同的微处理器上运行,可移植性较好。这是实现软件重用的基础。
执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢。
但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能之间的权衡。
可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。因此,当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。
基本性能。在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有 Ada、C/C++、Modula-2 和 Java 等。Ada 语言定义严格,易读易懂,有较丰富的库程序支持,目前,在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C 语言具有广泛的库程序支持,是嵌入式系统中应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域中占重要地位。 C++是一种面向对象的编程语言,在嵌入式系统设计中也得到了广泛的应用,如 GNU C++。Visual C++是一种集成开发环境,支持可视化编程,广泛应用于 GUI 程序开发。但 C 与 C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。
- (3)软件开发过程。嵌入式软件的开发过程不同于一般通用软件的开发过程,主要有如下步骤:
选择开发语言,建立交叉开发环境;
根据详细设计说明编写源代码,进行交叉编译、链接;
目标代码的重定位和下载;
在宿主机或目标机调试、验证软件功能;
进行代码的优化。
- (4)软件开发文档。在嵌入式产品的开发设计过程中,开发阶段完成系统产品的实现,这一阶段同时需要完成一系列的文档,这些文档对完成产品设计、维护相当重要,这些文档分别为技术文件目录、技术任务书、技术方案报告、产品规格、技术条件、设计说明书、试验报告、总结报告等。
12.7.8 系统集成与测试
通常嵌入式系统测试主要包括软件测试、硬件测试、单元测试三个部分。
一般系统的硬件测试包括可靠性测试和电磁兼容性测试,关于电磁兼容性目前已经有了强制性国内和国际标准。
嵌入式系统软件测试方法和原理跟通用软件的测试基本一致,软件测试时,一般需要测试实例或测试序列,序列有两种来源:一种是需要用户进行设计,另一种是标准的测试序列。
无论哪种测试实例,都要求实例能够高概率发现更多的错误,但在测试的内容上有些差别:
- (1)嵌入式软件必须长时间稳定运行。
- (2)嵌入式软件一般不会频繁地版本升级。
- (3)嵌入式软件通常使用在关键性的应用中。
- (4)嵌入式软件必须和嵌入式硬件一起对产品的故障和可靠性负责。
- (5)现实世界的条件是异步和不可预测的,使得模拟测试非常困难。
由于这些差别,使得嵌入式系统软件测试主要集中在以下 4 个不同的方面:
- (1)因为实时性和同时性很难同时满足,所以大多数测试集中于实时测试。
- (2)大多数实时系统都有资源约束,因此需要更多的性能和可用性测试。
- (3)可以使用专用实时跟踪工具对代码覆盖率进行测试。
- (4)对可靠性的测试级别比通用软件要高得多。
另外,性能测试也是设计嵌入式系统中需要完成的最主要的测试活动之一,对嵌入式系统有决定性的影响。
由于嵌入式系统的专用性特点,系统的硬件平台和软件平台多种多样,每种都针对不同的应用而专门设计,因此,应用软件在各个平台之间很少具有通用性,并且嵌入式系统的更新换代速度相对较快。为了保护已有的投资、充分利用现有的软件资源和加快产品研制速度,软件的移植在嵌入式领域变得非常频繁。