第12章 · 原文阅读

嵌入式系统设计

第12章 嵌入式系统设计

随着计算机技术、微电子技术、通信技术以及集成电路技术的发展,嵌入式技术逐渐发展和成熟起来。嵌入式系统的应用日益广泛,并在数量上远远超越了通用计算机系统,成为了计算机技术和计算机应用领域的一个重要组成部分。

本章主要讨论嵌入式系统的基本知识与嵌入式系统的开发设计两部分内容,主要包括嵌入式系统的概念、软/硬件组成与基本架构、嵌入式操作系统和嵌入式数据库系统、网络系统以及窗口系统等核心支撑软件系统的基本原理和技术,最后介绍嵌入式系统的开发设计。

12.1 嵌入式系统概论

嵌入式系统是一种以应用为中心,以计算机技术为基础,可以适应不同应用对功能、可靠性、成本、体积、功耗等方面的要求,集可配置,可裁减的软、硬件于一体的专用计算机系统。它具有很强的灵活性,主要由嵌入式硬件平台、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。其中,“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本的核心要素,具体来讲:

嵌入性:指计算机计算机嵌入到对象系统中,且满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。

专用性:指软、硬件的裁剪性,满足对象要求的最小软、硬件配置等。

计算机系统:指嵌入式系统必须是一个能满足对象系统控制要求的计算机系统。

归纳起来,典型的嵌入式系统具有以下特点:

12.2 嵌入式系统的组成

嵌入式系统一般都由软件和硬件两个部分组成,其中嵌入式处理器、存储器和外部设备构成整个系统的硬件基础。嵌入式系统的软件部分可以分为 3 个层次:系统软件、应用支撑软件和应用软件。其中,系统软件和支撑软件是基础,应用软件则是最能体现整个嵌入式系统的特点和功能的部分。

12.2.1 硬件架构

图 12-1 是一个嵌入式系统的基本硬件架构。微处理器是整个嵌入式系统的核心,负责控制系统的执行。外部设备是嵌入式系统同外界交互的通道,常见的外部设备有 Flash 存储器、键盘、输入笔、触摸屏、液晶显示器等输入/输出设备,在很多嵌入式系统中还有与系统用途紧密相关的各种专用外设。嵌入式系统中经常使用的存储器有 3 种类型:RAM、ROM(Read-Only Memory,只读内存)和混合存储器。系统的存储器用于存放系统的程序代码、数据和系统运行的结果。

1. 嵌入式处理器

嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前世界上嵌入式处理器的种类已经超过了 1000 种,比较流行的也有 30 几个系列。根据目前的使用情况,嵌入式处理器可以分为如下几类:

目前,嵌入式微控制器的品种和数量最多,约占嵌入式系统市场份额的 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 发展的一个动力,如各种带有智能逻辑的消费类产品、生物信息识别终端、带有加密/解密算法的设备、实时语音压缩和解压系统以及虚拟现实显示装置等,这类系统上的智能化算法一般运算量都比较大,这恰好可以充分发挥数字信号处理器的长处。

以往这些单元按照各自的功能做成一个个独立的芯片,并通过电路板与其他单元组成一个系统。现在将这些本来在电路板上的单元都集成到一个芯片中,构成一个嵌入式片上系统,从而大幅度缩小了系统的体积,降低了系统的复杂度,增强了系统的可靠性。在大量生产时,生产成本也远远低于单元部件组成的电路板系统。嵌入式片上系统可以分为通用片上系统和专用片上系统两类。通用类的主要产品有 Siemens 的 Trocore、Motorola 的 M-Core、某些ARM 系列的器件等。专用类的嵌入式片上系统一般是针对某一个或某些系统而设计的。具有代表性的产品有 Philips 的 Smart XA,它将 XA 单片机的内核和支持超过 2048 位复杂RSA 算法的 CCU 单元制作在一个芯片上,形成一个可加载 Java 或 C 的专用嵌入式片上系统,可用于网络安全等方面。

2. 总线

总线是连接计算机系统内部各个部件的共享高速通路,自 20 世纪 70 年代以来,工业界相继出现了多种总线标准,很多总线技术在嵌入式系统领域得到了广泛的应用。

嵌入式系统的总线一般分为片内总线和片外总线。片内总线是指嵌入式微处理器内的CPU 与片内其他部件连接的总线;片外总线是指总线控制器集成在微处理器内部或外部芯片上的用于连接外部设备的总线。

该规范定义了三种总线:

先进性能总线(Advanced High-performance Bus,AHB)。AHB 由主模块、从模块和基础结构三部分组成,整个 AHB 总线上的传输都由主模块发起,从模块响应。基础结构包括:仲裁器、主从模块多路选择器、译码器、名义主模块、名义从模块等。AHB 系统具有时钟边沿触发、无三态、分帧传输等特性。AHB 也支持复杂的事务处理,如突发传送、主单元重试、流水线操作以及分批事务处理等。

先进系统总线(Advanced System Bus,ASB)。ASB 用于高性能模块的互连,支持突发数据传输模式,较老的总线格式,逐步由 AHB 总线所替代。

先进外设总线(Advanced Peripheral Bus,APB)。APB 主要用于连接低带宽外围设备,其总线结构只有唯一的主模块,即 APB 桥,它不需要仲裁器以及响应/确认信号,以最低功耗为原则进行设计,具有总是两周期传输、无等待周期和响应信号的特点。

PCI 总线支持主控技术,允许智能设备在需要时获得总线控制权,以加速数据传输。

为了将 PCI 总线规范应用到工业控制计算机中,1995 年,推出了 Compact PCI 规范,并相继推出了 PCI-PCI Bridge 规范、Computer TelephonyTDM 规范和用户定义 I/O 引脚分配规范等。CPCI 总线规范有机地结合了 PCI 总线电气规范的高性能和欧洲卡结构的高可靠。

目前,CPCI 总线已经在嵌入式系统、工业控制计算机等高端系统中得到了广泛的应用,并逐步替代了 VME 和 MultiBUS 总线。

作为总结,表 12-1 对比了几种嵌入式总线技术的主要特点。

3. 存储器

嵌入式系统的存储器主要包括主存和外存,图 12-2 所示为嵌入式系统的存储结构,嵌入式系统的存储器主要分为三种:高速缓存(Cache)、片内主存和片外主存以及外存。

Flash 存储器是在 EPROM 和 EEPROM 的基础上发展起来的非易失性存储器,具有结构简单、可靠性高、体积小、质量轻、功耗低、成本低等优点,是最常用的一种外存类型。

4. I/O 设备与接口

因其应用领域的不同,嵌入式系统的输入设备多种多样,比较常见的有键盘、鼠标、触摸屏、手柄、声控开关等。通常,根据输入设备实现机理的不同,嵌入式系统的设备可以分为:机械式、触控式以及声光式三类。嵌入式系统的输出设备除了通用计算机常用的显示器、打印机、绘图仪等外,还包括 LED 指示灯、LCD 屏幕、扬声器等媒体。嵌入式系统与外部设备或其他的计算机系统进行通信时,需经接口适配电路,进行工作速度、数据格式、电平等匹配与转换,嵌入式系统应用的接口形式是多种多样的。

嵌入式系统中接口电路的设计需要首先考虑的是电平匹配问题,嵌入式系统微处理器所提供与接收信号的电平,必须与所连接的设备的电平相匹配,否则将导致电路损坏或逻辑判定错误。其次,还要考虑驱动能力和干扰问题等因素。

当前,在嵌入式系统中广泛应用的接口主要有:RS232-串行接口、并行接口、USB 接口、IEEE-1394 接口以及 RJ-45 接口等,此外,以蓝牙为代表的无线接口在嵌入式系统中的应用也日趋广泛。

IEEE1394 标准通过所有连接设备建立起一种对等网络,不需要主控节点来控制数据流,即跟 USB 技术相比,最大的区别是 IEEE1394 不需要主控制器,不同的外设之间可以直接传递信息,此外,采用该技术,两台计算机可以共享同一个外部设备。

IEEE1394 同时支持同步和异步传输两种模式。在异步传输模式下,信息的传递可以被中断,在同步模式下,数据将不受任何中断和干扰下实现连续传输。采用异步传输模式时,IEEE1394 会根据不同的设备实际需要分配相应的带宽。同时,IEEE1394 设备也支持热插拔和即插即用。

12.2.2 软件架构

随着嵌入式技术的发展,特别是在后 PC 时代,嵌入式软件系统得到了极大的丰富和发展,形成了一个完整的软件体系,如图 12-3 所示。

这个体系自底向上由三部分组成:嵌入式操作系统、应用支撑软件和应用软件。

应用支撑软件一般用于一些浅度嵌入的系统中,如智能手机、个人数字助理等。

12.3 嵌入式开发平台与调试环境

嵌入式系统的应用支撑软件近年来发展迅速。通常,应用支撑软件包括窗口系统、数据库管理系统及 Java 虚拟机等几个部分。应用支撑软件的出现大大改变了应用软件的开发条件,同时也使得应用系统的功能不断增强。本节主要介绍嵌入式开发环境与软件调试技术。

12.3.1 嵌入式系统软件开发平台

嵌入式系统的软件开发方法采用的不是通用的开发方法,而是交叉式开发方法。本小节主要介绍嵌入式系统软件开发的交叉编译环境的基本概念和特点,以及软件调试常用的几种方法。

1. 交叉平台开发环境

嵌入式系统的软件开发采用交叉平台开发方法(Cross Platform Development,CPD),即软件在一个通用的平台上开发,而在另一个嵌入式目标平台上运行。这个用于开发嵌入式软件的通用平台通常叫作宿主机系统,被开发的嵌入式系统称为目标机系统。而当软件执行环境和开发环境一致时的开发过程则称为本地开发(Native Development,ND)。

图 12-4 是一个典型的交叉平台开发环境,通常包含三个高度集成的部分:

2.交叉编译环境

宿主机提供的基本开发工具是交叉编译器、交叉链接器和源代码调试器。作为目标机的嵌入式系统则可能提供一个动态装载器、链接装载器、监视器和一个调试代理等。在目标机和宿主机之间有一组连接,通过这组连接程序代码映像从宿主机下载到目标机,这组连接同时也用来传输宿主机和目标机调试代理之间的信息。

嵌入式系统开发人员需要完全了解目标机系统如何在嵌入式系统上存储程序映像、可执行映像如何下载到内存及执行控制如何传给应用,以及运行期间如何和何时装载程序映像,如何交叉式地开发和调试应用系统。这些方面对代码如何开发、编译、链接等步骤都有影响。

图 12-5 是一个典型的交叉编译环境的示例,显示了如何使用开发工具处理各种输入文件,并产生最终目标文件的过程。其中,交叉编译器将用户编写的 C/C++/Java 源代码文件根据目标机的 CPU 类型生成包含二进制代码和程序数据的目标文件。在此过程中,交叉编译器会建立一个符号表,包含所产生的目标文件中指向映像地址的符号名,当建立重定位输出时,编译器为每个相关的符号产生地址。

通常,还可以使用归档工具将这些目标文件收集到一起形成一个库。最后,链接器将这些目标文件作为输入来产生一个可执行的映像。

一般,用户会先编辑一个链接脚本文件,用来指示链接器如何组合和重定位各个代码段以便生成最终文件。此外,链接器还可以将多个目标文件组合成一个更大的重定位目标文件或一个共享目标文件。

目前,嵌入式系统中常用的目标文件格式是 COFF(Common Object File Format,公共对象文件格式)和 ELF(Executable Linking Format,可执行链接格式)。另外,一些系统还需要有一些专门的工具将上述格式转换成二进制代码格式才可使用。

通常,一个目标文件包含:

12.3.2 嵌入式开发调试

通用系统与嵌入式系统的软件调试过程存在着明显的差异。对于通用系统,调试工具与被调试的程序位于同一台计算机上,调试工具通过操作系统的调试接口来控制被调试的程序。

但是在嵌入式系统中,由于资源的限制,不能直接在其上开发应用程序,调试过程通常也以交叉方式进行的。在实际开发实践中,经常采用的调试方法有直接测试法、调试监控法、在线仿真法、片上调试法及模拟器法等。

1. 直接调试法

直接调试法就是将目标代码下载到目标机上,让其执行,通过观察指示灯来判断程序的运行状态。在嵌入式系统发展的早期一般采用这种方式进行调试,其基本步骤是:

这种方法是最原始的调试方法,程序运行时产生的问题,只有通过检查源代码来解决,因而开发效率很低。

2. 调试监控法

调试监控法也叫插桩法。目标机和宿主机一般通过串行口、并行口或以太网相连接,采用这种方法还需要在宿主机的调试器内和目标机的操作系统上分别启动一个功能模块,然后通过这两个功能模块的相互通信来实现对应用程序的调试。在目标机上添加的模块叫作桩,也叫调试服务器或调试监控器,主要有两个作用:其一,监视和控制被调试的程序;其二,跟宿主机上调试程序通信,接收控制指令,返回结果等。

在进行调试的时候,宿主机上的调试器通过连接线路向调试监控器发送各种请求,实现目标机内存读/写和寄存器访问、程序下载、单步跟踪和设置断点等操作。来自宿主机的请求和目标机的响应都按照预定的通信协议进行交互。

使用插桩法作为调试手段时,开发应用程序的基本步骤是:

相对于直接测试法,插桩法明显地提高了开发效率,降低了调试的难度,缩短了产品的开发周期,有效降低了开发成本。但是插桩法仍有明显的缺点,主要体现在以下几个方面:

为了克服插桩法的缺点,出现了一种改良的方法,即 ROM 仿真器法。

ROM 仿真器可以被认为是一种用于替代目标机上 ROM 芯片的硬件设备,ROM 仿真器一端跟宿主机相连,一端通过 ROM 芯片的引脚插座与目标机相连。对于嵌入式处理器来说,ROM 仿真器像是一个只读存储器,而对于宿主机来说,像一个调试监控器。ROM 仿真器的地址可以实时映射到目标机的 ROM 地址空间里,所以它可以仿真目标机的 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 等。比较高级的指令级模拟器还可以模拟目标机的外部设备,如键盘、串口、网络接口等。系统调用级的模拟器相当于在宿主机上安装了目标机的操作系统,使得基于目标机的操作系统的应用程序可以在宿主机上运行。被模拟的目标机操作系统的类型可以跟宿主机的不同。两种类型的模拟器相比较,指令级模拟器所提供的运行环境与实际目标机更为接近。

使用模拟器的最大好处是在实际的目标机不存在的条件下就可以为其开发应用程序,并且在调试时利用宿主机的资源提供更详细的错误诊断信息,但模拟器有许多不足之处:

尽管模拟器有很多的不足之处,但在项目开发的早期阶段,其价值是不可估量的,尤其对那些实时性不强的应用,模拟器调试不需要特殊的硬件资源,是一种非常经济的方法。

12.4 嵌入式网络系统

嵌入式网络是用于连接各种嵌入式系统,使之可以互相传递信息、共享资源的网络系统。

嵌入式系统在不同的场合采用不同的连接技术,如在家庭居室采用家庭信息网,在工业自动化领域采用现场总线,在移动信息设备等嵌入式系统则采用移动通信网,此外,还有一些专用连接技术用于连接嵌入式系统。

12.4.1 现场总线网

现场总线(FieldBus)是 20 世纪 80 年代中期继模拟仪表控制系统、集中式数字控制系统及集散控制系统之后,发展起来的一项计算机控制技术,它是当今自动化控制领域技术发展的热点之一,通常也被称作工业自动化领域的计算机局域网。

现场总线是一种将数字传感器、变换器、工业仪表及控制执行机构等现场设备与工业过程控制单元、现场操作站等互相连接而成的网络。它具有全数字化、分散、双向传输和多分支的特点,是工业控制网络向现场级发展的产物。

现场总线是一种低带宽的底层控制网络,位于生产控制和网络结构的底层,因此也被称为底层网(Infranet)。它主要应用于生产现场,在测量控制设备之间实现双向的、串行的、多节点的数字通信。

现场总线控制系统(Field Control System,FCS)是运用现场总线连接各控制器及仪表设备而构成的控制系统,该控制系统将控制功能彻底下放到现场,降低了安装成本和维护费用。

实际上 FCS 是一种开放的、具有互操作性的、彻底分散的分布式控制系统。

嵌入式现场控制系统将专用微处理器置入传统的测量控制仪表,使其具备数字计算和数字通信能力。它采用双绞线、电力线或光纤等作为总线,把多个测量控制仪表连接成网络,并按照规范标准的通信协议,在位于现场的多个微机化测量控制设备之间及现场仪表与远程监控计算机之间,实现数据传输与信息交换,形成了各种适用于实际需要的自动控制系统。

简言之,现场总线控制系统把单个分散的测量控制设备变成网络节点,以现场总线为纽带,使这些分散的设备成为可以互相沟通信息共同完成自动控制任务的网络系统。借助于现场总线技术,传统上的单个分散控制设备变成了互相沟通、协同工作的整体。

12.4.2 家庭信息网

家庭信息网是一种把家庭范围内的个人计算机、家用电器、水、电、气仪表、照明设备和网络设备、安全设备连接在一起的局域网。其主要功能是集中控制上述设备并将其接入Internet,以共享网络资源和服务。此外,家庭信息网还可以扩展至整幢住宅甚至整个社区,成为智能住宅小区和智能社会的基础。

在家庭信息网络系统中,所有的家庭设备都是智能化的,包括家用电器、水、电、气仪表,以及照明设备等。它们能够互相通信,并通过家庭网关接入 Internet。家庭信息网络的实现为人们提供了更加安全、便捷、舒适的家庭环境。如主人外出时,大门自动关闭、上锁,监视系统自动开启,家中出现异常情况能够自动通知主人,对家中各种设备能够随时随地进行控制,仪表数据能够自动上传等。

家庭信息网需要解决两个基本问题:

家庭信息网可以采用不同的拓扑结构,如总线型、星型结构等。家庭信息网内部还可以进一步划分出若干控制子网和数据子网,其中控制子网类似于现场总线,是一种带宽不高、主要用于发送和接收控制信息的网络。而数据子网对带宽的要求则较高,连接在其上的设备需要传送大量的数据信息。

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 协议栈是相同的,但是由于嵌入式系统的资源限制,嵌入式协议栈的一些指标和接口等与普通的协议栈可能有所不同。

因此,多数厂商在将标准的协议栈接口移植到嵌入式系统上的时候,都做了不同程度的修改简化,建立了高效率的专用协议栈,它们所提供的 API 与通用协议栈的 API 不一定完全一致。

12.5 嵌入式数据库管理系统

随着嵌入式技术的发展,嵌入式数据库逐步走向应用。本质上,嵌入式数据库是由通用数据库发展而来的,在各种嵌入式设备上或移动设备上运行,在嵌入式系统中更显示出其优越性,由于受到嵌入式系统本身应用环境的制约,嵌入式数据库有着与通用数据库不同的特点。

通常,嵌入式数据库管理系统就是在嵌入式设备上使用的数据库管理系统。由于用到嵌入式数据库管理系统的多是移动信息设备,诸如掌上电脑、PDA、车载设备等移动通信设备,位置固定的嵌入式设备很少用到,所以,嵌入式数据库也称为移动数据库或嵌入式移动数据库。其作用主要是解决移动计算环境下数据的管理问题,移动数据库是移动计算环境中的分布式数据库。

在嵌入式系统中引入数据库技术,主要是因为直接在嵌入式操作系统或裸机之上开发信息管理应用程序存在如下缺点:

在嵌入式系统中引入数据库管理系统可以在很大程度上解决上述问题,提高应用系统的开发效率和可移植性。

12.5.1 使用环境的特点

嵌入式数据库系统是一个包含嵌入式数据库管理系统在内的跨越移动通信设备、工作站或台式机及数据服务器的综合系统,系统所具有的这个特点及该系统的使用环境对嵌入式数据库管理系统有着较大的影响,直接影响到嵌入式数据库管理系统的结构。其使用环境的特点可以简单地归纳如下:

12.5.2 系统组成与关键技术

一个完整的嵌入式数据库管理系统由若干子系统组成,包括主数据库管理系统、同步服务器、嵌入式数据库管理系统、连接网络等几个子系统,如图 12-6 所示。

1. 嵌入式移动数据库在应用中的关键

嵌入式移动数据库在实际应用中必须解决好数据的一致性(复制性)、高效的事务处理和数据的安全性等问题。

根据网络连接情况来确定事务处理的优先级,网络连接速度高的事务请求优先处理;

根据操作时间来确定事务是否迁移,即长时间的事务操作将全部迁移到服务器上执行,无须保证网络的一直畅通;

根据数据量的大小来确定事务是上载执行还是下载数据副本执行后上载;

完善的日志记录策略;

事务处理过程中,网络断接处理时采用服务器发现机制还是采用客户端声明机制;

事务移动(如:位置相关查询)过程中的用户位置属性的实时更新。

对移动终端进行认证,防止非法终端的欺骗性接入;

对无线通信进行加密,防止数据信息泄漏;

对下载的数据副本加密存储,以防移动终端物理丢失后的数据泄密。

2. 移动数据库管理系统的特性

移动 DBMS 的计算环境是传统分布式 DBMS 的扩展,它可以看做客户端与固定服务器结点动态连接的分布式系统。因此移动计算环境中的数据库管理系统是一种动态分布式数据库管理系统。由于嵌入式移动数据库管理系统在移动计算的环境下应用在嵌入式操作系统之上,所以它有自己的特点和功能需求:

嵌入式移动数据库管理系统的数据同步机制应具有以下几个特点:

提供多种数据同步方式,具有上载同步、下载同步和完全同步 3 种同步方式;

具有完善的冲突检测机制和灵活的冲突解决方案,具有冲突日志记录功能;

支持快速同步,系统同步时,只传递变化的数据,节省了大量的同步时间;

支持表的水平分割和垂直分割复制,最大限度地降低了嵌入式数据库的大小;

支持异构数据源连接同步,可以用支持 ODBC 的异构数据源作为主数据库和嵌入式设备上的数据库进行数据同步;

具有主动同步的功能,允许用户对系统提供的同步事件自定义过程实现,提供了最大灵活度的同步过程。

另外,一种理想的状态是用户只用一台移动终端(如手机)就能对与它相关的所有移动数据库进行数据操作和管理。这就要求前端系统具有通用性,而且要求移动数据库的接口有统一、规范的标准。前端管理系统在进行数据处理时自动生成统一的事务处理命令,提交当前所连接的数据服务器执行。这样就有效地增强了嵌入式移动数据库管理系统的通用性,扩大了嵌入式移动数据库的应用前景。

总之,在嵌入式移动数据库管理系统中还需要考虑诸多传统计算环境下不需要考虑的问题,如对断接操作的支持、对跨区长事务的支持、对位置相关查询的支持、对查询优化的特殊考虑及对提高有限资源的利用率和对系统效率的考虑等。为了有效地解决上述问题,诸如复制与缓存技术、移动事务处理、数据广播技术、移动查询处理与查询优化、位置相关的数据处理及查询技术、移动信息发布技术、移动 Agent 等技术仍在不断地发展和完善,会进一步促进嵌入式移动数据库管理系统的发展。

12.6 实时系统与嵌入式操作系统

简单地说,实时系统可以看成对外部事件能够及时响应的系统。这种系统最重要的特征是时间性,也就是实时性,实时系统的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生这些结果的时间。

目前,大多数实时系统都是嵌入式的,并且实际运行中的嵌入式系统也都有实时性的需求,因此,在诸多类型的嵌入式操作系统中,实时嵌入式操作系统是最具代表性的一类,它融合了几乎所有类型的嵌入式操作系统的特点,所以本节主要以实时嵌入式操作系统的特性和概念为主线,对嵌入式操作系统的基本概念与特点、基本架构、内核服务、内核对象与内核服务等核心内容进行全面的介绍。

12.6.1 嵌入式系统的实时概念

现实世界中,并非所有的嵌入式系统都具有实时特性,所有的实时系统也不一定都是嵌入式的。但这两种系统并不互相排斥,兼有这两种系统特性的系统称为实时嵌入式系统。

它们之间的关系如图 12-7 所示。

对于实时系统的划分,通常还可以根据实时性的强弱,即系统必须对外部事件做出响应的时间长短,将实时系统分为:

根据对错失时限的容忍程度或后果的严重性,可以将实时系统分为软实时系统和硬实时系统。

表 12-2 是对软实时和硬实时系统的对比。

通过比较,可知由于错过时限对软实时系统的运行没有决定性的影响,一个软实时系统不必预测是否可能有悬而未决的时限错失。相反,软实时系统在探知到错失一个时限后可以启动一个恢复进程。

在实时系统中,任务的开始时间跟时限或完成时间同样重要,由于任务缺少需要的资源,如 CPU 和内存,就有可能阻碍任务执行的开始并直接导致错失任务的完成时限,因此时限问题演变成了资源的调度问题。

这一点对调度算法和任务设计都有至关重要的影响。

12.6.2 嵌入式操作系统概述

所谓嵌入式操作系统就是指运行在嵌入式计算机系统上支持嵌入式应用程序的操作系统,是用于控制和管理嵌入式系统中的硬件和软件资源、提供系统服务的软件集合。嵌入式操作系统是嵌入式软件的一个重要组成部分。它的出现提高了嵌入式软件开发的效率,提高了应用软件的可移植性,有力地推动了嵌入式系统的发展。

1. 嵌入式操作系统的特点

与通用操作系统相比,嵌入式操作系统主要有以下特点:

这类系统一般没有大容量的内存,几乎没有外存,因此,嵌入式操作系统必须做得小巧,以尽量少占用系统资源。为了提高系统的执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片中,而不是存放在磁盘等载体中。

2. 嵌入式操作系统的分类

嵌入式操作系统的种类繁多,可以从不同角度对其进行分类。

从嵌入式操作系统的获得形式上,可以分为商业型和免费型两类:

从嵌入式操作系统的实时性上,可以分为实时嵌入式操作系统和非实时嵌入式操作系统两类。

12.6.3 实时嵌入式操作系统

整体上看,一个嵌入式系统的实时性能是由硬件、实时操作系统及应用程序共同决定的,其中,嵌入式实时操作系统内核的性能起着关键的作用。通常,有两种类型的实时嵌入式操作系统:实时内核型的 RTEOS 与通用型的 RTEOS。

实时内核型的 RTEOS:这类操作系统,驱动程序传统嵌在内核之中,应用程序和中间件实现在标准的应用程序接口(APIs,Application Programming Interfaces)之上。

实时通用型的 RTEOS:这类操作系统,驱动程序并非深度嵌入到内核中,而是在内核之上实现,并且仅包含少数必要的驱动程序,应用程序和中间件可以直接在驱动程序之上实现,而不必在标准的 APIs 实现。它们的区别如图 12-8 所示。

实时嵌入式操作系统和通用操作系统之间的功能有很多相似之处,例如,它们都支持多任务,支持软件和硬件的资源管理,以及都为应用提供基本的操作系统服务。

1. 嵌入式实时操作系统的关键特性

与通用操作系统相比,实时嵌入式操作系统在功能上具有很多特性。实时嵌入式操作系统特有的不同于通用操作系统的关键特性主要有:

满足嵌入式应用的高可靠性;

满足应用需要的可裁减能力;

内存需求少;

运行的可预测性;

采用实时调度策略;

系统的规模紧凑;

支持从 ROM 或 RAM 上引导和运行;

对不同的硬件平台均有更好的可移植性。

2. 嵌入式实时操作系统的实时性能指标在评估实时操作系统设计性能时,时间性能指标是最重要的一个性能指标,常用的时间性能指标主要有如下几个:

任务切换时间所对应的时序图如图 12-9 所示。

中断延迟时间,是指从中断发生到系统获知中断的时间,主要受系统最大关中断时间的影响,关中断时间越长,中断延迟也就越长;

中断处理执行时间,该时间由具体的应用决定;

中断响应时间,是指从中断发生到开始执行用户中断服务例程的时间;

中断恢复时间,是指用户中断服务例程结束回到被中断的代码之间的时间;

最大关中断时间,包含两个方面:一是内核最大关中断时间,即内核在执行临界区代码时关中断;二是应用关中断时间,关中断最大时间是这两种关中断时间的最大值;

任务响应时间,是指从任务对应的中断产生到该任务真正开始运行的时间;

对于可抢占式调度,中断恢复的时间还要加上进行任务切换和恢复新的任务上下文的时间。

作为总结,典型的可抢占实时内核的性能指标计算方法如表 12-3 所示。

12.6.4 主流嵌入式操作系统介绍

迄今为止,据不完全统计,世界上现有的嵌入式操作系统的总数达几百个之多。其中最常用的有十几种,这些操作系统在各自的应用领域都有很高的知名度和广大的用户群。

表 12-4 选取了一些业界常见的嵌入式操作系统加以比较。

12.7 嵌入式系统开发设计

嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍,同时还要满足某些设计指标,并使其他的设计指标也同时达到最佳化。

嵌入式系统的设计方法跟一般的硬件设计、软件开发的方法不同,是采用硬件和软件协同设计的方法,开发过程不仅涉及软件领域的知识,还涉及硬件领域的综合知识,甚至还涉及机械等方面的知识。要求设计者必须熟悉并能自如地运用这些领域的各种技术,才能使所设计的系统达到最优。

虽然嵌入式系统应用软件的设计方案随应用领域的不同而不同,但是嵌入式系统的分析与设计方法也遵循软件工程的一般原则,许多成熟的分析和设计方法都可以在嵌入式领域得到应用。嵌入式系统的开发过程同样也包括需求分析、系统设计、实现和测试几个基本阶段,并且每个阶段都有其独有的特征和重点。

本节主要介绍嵌入式系统开发设计的技术与方法,并从嵌入式系统应用和计算模型的角度分析应用软件设计的方法及设计过程中面临的主要问题。最后,讨论嵌入式领域软件移植的相关问题。

12.7.1 嵌入式系统设计概述

进行嵌入式系统设计前,应明确嵌入式系统设计本身的特点及衡量嵌入式系统设计的一些主要的技术指标。

1. 嵌入式系统设计的特点

与通常的系统设计相比,嵌入式系统设计具有以下特点:

软、硬件协同并行开发;

微处理器的类型多种多样;

实时嵌入式操作系统具有多样性;

与通用系统开发相比,可利用系统资源很少;

应用支持少;

要求特殊的开发工具;

软、硬件都要很健壮;

调试很困难。

2. 嵌入式系统的技术指标

嵌入式系统设计的常用指标有:

为了最好地满足设计最佳化,设计者必须了解各种软、硬件的实现技术,并且能够从一种技术转移到另一种技术,以便找到特定约束下的最佳方案。

3. 嵌入式系统的设计挑战

嵌入式系统设计所面临的挑战有以下几个方面。

12.7.2 开发模型与设计流程

与通用系统的开发类似,嵌入式系统的开发也可以采用软件工程中常见的开发模型,主要包括瀑布模型、螺旋模型、逐步求精模型及层次模型。

1. 常用开发模型

设计流程是系统设计期间应遵循的一系列步骤,其中一些步骤可以由自动化工具完成,而另外一些只可用手工完成。在嵌入式系统领域,有如下几种常用开发过程模型。

在后期,当构成更复杂的系统版本时,每一个阶段都会有更多的工作,并需要扩大设计的螺旋,这种逐步求精的方法使设计者可以通过一系列的设计循环加深对所开发的系统的理解。

螺旋的顶部第一个循环是很小很短的,而螺旋底部的最后的循环加入了对螺旋模型的早期循环的细节补充,螺旋模型比瀑布模型更加符合实际。

2. 嵌入式系统的设计方法

一个良好的嵌入式系统设计方法是十分重要的,这是因为:

嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。

项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。

希赛教育专家提示:由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。

程序建立阶段的工作是根据详细设计阶段产生的文档进行的。这一阶段的工作主要是源代码编写、编译、链接等几个子过程,这些工作都是在宿主机进行的,不需要用到目标机。

产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用可用的几种调试方法之一或它们的有效组合来进行。

嵌入式系统设计不同于传统的软件设计,如图 12-11 所示。经常包含硬件设计和软件设计,其中前端活动,如规格说明和系统架构,需要同时考虑硬件和软件两个方面。

类似的,后端设计,如系统集成和测试要考虑整个系统。在中间阶段中,软件和硬件构件的开发彼此相互独立,并且大多数的硬件和软件的工作能够相对独立地进行。最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件上配置的不同,固化有几种方式,可以固化在 EPROM 和 FLASH 等存储器中,也可固化在 DOC 和 DOM 等电子盘中。通常还要借助一些专用编程器进行。

由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。

在系统开发流程的各个阶段,分别要进行系统的确认和性能评估、安全性评估及风险性评价,并对系统的实现进行测试验证。

12.7.3 嵌入式系统设计的核心技术

嵌入式系统的开发是软、硬件综合开发,与通用系统的开发存在巨大差异,一方面是因为每个嵌入式系统都是一个软硬件的结合体;另一方面,嵌入式系统一旦研制完成,软件便随着硬件固化到产品中,具有很强的专用性。在这些特点的影响下,必然要有一种不同于通用软件开发过程的工程方法学来支持嵌入式系统的开发过程,同时,这些特点也决定了嵌入式系统开发所采用的独特的核心技术。

总体来看,在嵌入式开发领域,主要有三种核心技术:处理器技术、IC 技术、设计/ 验证技术。

1.处理器技术

处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其他处理器不同。

在嵌入式系统中使用通用处理器具有设计指标上的一些优势。上市时间和 NRE 成本较低,因为设计者只需编写程序,而不需做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。

当然,这种方式也有一些设计指标上的缺陷,数量大时单位成本相对较高,因为数量大时,自行设计的 NRE 成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功耗可能变大。

在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时单位成本可能较低,而设计时间与 NRE 成本可能较高,灵活性较差,数量小时单位成本较高,对于某些应用,性能不如通用处理器。

2. IC 技术

从系统的集成电路设计描述得到实际芯片的物理映射过程的实现技术便是 IC(Integrated Circuits,集成电路)技术,当前在半导体领域的三类实现技术,即全定制、半定制和可编程技术均可应用于嵌入式系统的硬件设计。

3. 设计/验证技术

嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。

芯片级设计技术的核心是编译/综合、库/IP(Intellectual Property,知识产权)、测试/ 验证。编译/综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。

库/IP 技术将预先设计好的低抽象级实现用于高级抽象。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。

软件设计技术的核心是软件语言。软件语言经历了从低级语言(机器语言、汇编语言)

到高级语言(例如,结构化设计语言、面向对象设计语言)的发展历程,推动其发展的是汇编技术、分析技术、编译/解释技术等诸多相关技术。软件语言的级别也从实现级、设计级、功能级逐渐向需求级语言发展过渡。

早期,随着通用处理器概念的逐渐形成,软件技术迅速发展,软件的复杂度也开始增加,软件设计和硬件设计的技术和领域完全分开。设计技术和工具在这两个领域同步得到发展,也使得行为描述可以在越来越抽象的级别上进行,以适应设计复杂度不断增长的需要。这种同步发展如今又使得这两个领域都使用同样的时序模型来描述行为,因而这两个领域即将可能再度统一为一个领域。

鉴于大多数嵌入式系统都是实时的反应式系统,反应式系统具有多任务并发、时间约束严格与可靠性高的特点,针对反应式系统的设计和描述,人们相继提出了多种描述语言和验证方法学。例如,采用时序逻辑用来刻画反应式系统的性质及推理反应式系统的行为,采用模型检验技术验证反应式系统设计的正确性等,这些技术已逐步在嵌入式开发过程中发挥着重要的作用。

12.7.4 嵌入式开发设计环境

嵌入式系统的开发环境种类很多,大体可以把它们分为如下几类:

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. 面向对象模型

传统的并发进程模型是围绕进程的概念进行设计的,进程是一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和理解。

面向对象模型以一种更加直接的方式刻画客观世界中的活动,模型中存在着潜在的并发执行能力。一个对象向另一个对象发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消息,消息发送者和消息接受者可以并发执行。对象不都是处于被动的提供服务状态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处理。一个对象往往可以同时处理多个消息。

对象是数据和操作的封装体,数据存放在对象的局部变量中,对象的状态由对象所有的局部变量在某一时刻的取值来表示。在并发环境中,还要考虑对象并发状态的描述问题,因为对象的并发控制是根据对象的并发状态来进行的。

把并发与面向对象相结合,归结起来可分为两条途径:

面向对象的并发模型可以分为两种类型:隐式并发模型和显式并发模型。

在建立对象以后,用实时操作系统支持的进程概念来表示并发,形成对象和进程两个抽象层次,即先将系统分解为准并发进程作为开始,而在每个进程的内部采用面向对象的技术。对象间交互表示成嵌套的函数调用,通过加入锁、监视器、信号量等显式同步机制,来保证对象的完整。该模型将进程置于对象之上,对象中不必考虑并发、对象串行化,如图 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 系统设计

目前,嵌入式系统的设计工具可以分为两类:协同合成工具和协同模拟工具。

POLIS:POLIS 是 UC-Berkeley 开发的交互式嵌入式系统的软、硬件协同设计框架,它适用于小型控制系统的设计,系统描述支持基于 FSM(Finite State Machine)的语言。由于软、硬件均可透明地从同一 CFSM 描述中取得,设计空间的灵活性也相应增加,支持使用PTOLEMY 的协同模拟,在描述及实现层均支持正式的验证,架构的支持受限,即硬件 CFSMs所包围的只有一个处理器,而且不支持共享内存。

COSYMA:COSYMA 是由德国 IDA 公司开发的一种探索硬件与软件协同设计合成进程的平台,它面向软件系统的描述较简单,支持自动分割和协同处理器合成,在合成时期可以对设计空间进行探索,系统合成取决于硬件限制,不支持并发模块,即一次只能有一个线程执行,架构同样受限,不支持正式验证,设计的成功与否取决于分割及开销估计技术。

Chinook:Chinook 是为控制系统而设计的,整个系统的描述作为一个输入提供给 Chinook,它的内部模式基于类似等级状态的模式,它不对代码进行分割,它为整个设计提供单一的模拟环境,Chinook 支持多种系统架构,尤其是多处理器结构。同样支持定时限制的描述,它能合成多种接口,包括系统之间的软、硬件接口,能直接从定时图表中合成设备驱动器,可以控制处理器之间的通信。

目前,主要的协同模拟工具有如下两种。

PTOLEMY:PTOLEMY 的关键思想是混合使用面向对象内核的计算模型,可用于模拟多种的系统,在各种应用中被广泛地使用,但不适合于系统合成,硬件模拟也是它的一项功能。

TSS:TSS(Tool for System Simulation)是模拟复杂硬件的工具,采用 C 语言编写,单个模块的提取可由用户控制,可以方便地进行添加与删除模块。但不支持分级模块,没有用于同步各处理器存取共享数据结构的机制,模块间的通信通过端口和总线进行。并且,TSS 支持多核系统的模拟。

1. 系统架构设计

描述系统如何实现规格说明中定义的功能是系统架构设计的主要目的。但是在设计嵌入式系统的系统结构时,很难将软件和硬件完全分开。通常的处理是先考虑系统的软件架构,然后再考虑其硬件实现。系统结构的描述必须符合功能上和非功能上的需求。不仅所要求的功能要体现,而且成本、速度、功耗等非功能约束也要满足。从系统原始框图中的功能元素开始逐个考虑和细化,把原始框图转化为软件和硬件系统结构的同时考虑非功能约束,是一个切实可行的方法。下面以 GPS 移动地图系统的架构设计为例进行说明。

2. 硬件子系统设计

嵌入式系统的开发环境由 4 部分组成:目标硬件平台、嵌入式操作系统、编程语言和开发工具,其中处理器和操作系统的选择应当考虑更多的因素,避免错误的决策影响项目的进度。

更通用的可编程技术提供了较大的灵活性,降低了 NRE 成本,建立产品样机与上市的时间较快。定制的技术能够提供较低的功耗、较好的性能、更小的体积和大批量生产时的低成本。

通常,一个公司要推出一种产品,如机顶盒、家庭路由器或通用处理器等,可以先推出半定制产品,以尽快占领市场,然后再推出全定制的产品。也可先用较可靠的老技术实现处理器,再用新制程的技术实现下一代。同样,嵌入式系统的设计者可以使用可编程的器件来建立样机,以加速上市时间,批量时再采用定制器件。

根据这些原则,设计者便可以对采用的处理器技术和处理器做出合理选择。一般,全定制商品化的“通用处理器软件”是大多数情况下都适用的一个选择。

处理器的速度。一个处理器的性能取决于多个方面的因素:时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和 I/O 子系统。处理器的性能满足系统的需求,并有一定的余量,但也不必选得太高。

技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,从而减少了芯片的数量,进而降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无须过多的组合逻辑就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如 DMA 控制器、内存管理器、中断控制器、串行设备、时钟等的配套。

开发人员对处理器的熟悉程度,即项目的开发人员需要在处理器本身的成本和开发成本之间做一个权衡。

处理器的 I/O 功能是否满足系统的需求,即许多处理器提供内置的外部设备,以减少芯片数量、降低成本,应尽量考虑这种方案。

处理器的相关软件支持工具,即该款处理器是否具有完善的嵌入式操作系统、编程语言和开发工具的支持等。

处理器的调试,即处理器是否集成了调试功能,如是否支持 JTAG、BDM 等调试方式。

处理器制造商的支持可信度。在产品的生命周期里选择某种处理器时,设计者必须确认它有足够的供货量、技术支持等处理器的低功耗。

嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS 导航器、智能家电等消费类电子产品,这些产品中选购的微处理器的典型特点是要求高性能、低功耗。许多 CPU 生产厂家已经进入了这个领域。

设计软、硬件之间的接口时,需要硬件设计者和软件设计者协同工作才能完成,良好的接口设计可以保证硬件简洁、易于编程。

设计时需要注意以下几点。

I/O 端口:列出硬件的所有端口、端口地址、端口属性、使用的命令和序列的意义、端口的状态及意义。

硬件寄存器:对每个寄存器设计寄存器的地址、寄存器的位地址和每个位表示的意义,以及对寄存器读写的说明、使用该寄存器的要求和时序说明。

内存映射:共享内存和内存映射 I/O 的地址,对每个内存映射,说明每个 I/O 操作的读/写序列、地址分配。

硬件中断:如何使用硬件中断,列出所使用的硬件中断号和分配的硬件事件。

存储器空间分配:列出系统中程序和数据占用的空间大小、位置,以及存储器类型和访问方式等。

总之,硬件设计者应该给软件设计者更多、更详细的信息,以便于进行软件设计和开发。

3. 软件子系统设计

根据需求分析阶段的规格说明文档,确定系统计算模型,对软件部分进行合理的设计即可。

操作系统的功能。根据项目需要的操作系统功能来选择操作系统产品,要考虑系统是否支持操作系统的全部功能或部分功能,是否支持文件系统、人机界面,是实时系统还是分时系统及系统是否可裁减等因素。

配套开发工具的选择。有些实时操作系统(rtos)只支持该系统供应商的开发工具。也就是说,还必须向操作系统供应商获取编译器、调试器等。有些操作系统使用广泛且有第三方工具可用,因此,选择的余地比较大。

操作系统的移植难易程度。操作系统到硬件的移植是一个重要的问题。它是关系到整个系统能否按期完工的一个关键因素,因此要选择那些可移植性程度高的操作系统,从而避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。

操作系统的内存需求如何。均衡考虑是否需要额外 ram 或 eeprom 来迎合操作系统对内存的较大要求。有些操作系统对内存的要求是与目标相关的。如 tornado/vxworks,开发人员能按照应用需求分配所需的资源,而不是为操作系统分配资源。从需要几 k 字节存储区的嵌入设计到需求更多的操作系统功能的复杂的高端实时应用,开发人员可任意选择多达 80种不同的配置。

操作系统附加软件包。是否包含所需的软件部件,如网络协议栈、文件系统、各种常用外设的驱动等。

操作系统的实时性如何。实时性分为软实时和硬实时。有些嵌入式操作系统只能提供软实时性能,如 microsoft windows ce 2.0 是 32 位,windows 兼容,微内核,可伸缩实时操作系统,可以满足大部分嵌入式和非嵌入式应用的需要。但实时性不够强,属于软实时嵌入式操作系统。

操作系统的灵活性如何。操作系统是否具有可剪裁性,即能否根据实际需要进行系统功能的剪裁。有些操作系统具有较强的可剪裁性,如嵌入式 linux 、 tornado/vxworks 等。

通用性。随着微处理器技术的不断发展,其功能越来越专用,种类越来越多,但不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现,而高级语言一般和具体机器的硬件结构联系较少,比较流行的高级语言对多数微处理器都有良好的支持,通用性较好。

可移植性。由于汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,因此,移植性差。高级语言对所有微处理器都是通用的,因此,程序可以在不同的微处理器上运行,可移植性较好。这是实现软件重用的基础。

执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢。

但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能之间的权衡。

可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。因此,当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。

基本性能。在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有 Ada、C/C++、Modula-2 和 Java 等。Ada 语言定义严格,易读易懂,有较丰富的库程序支持,目前,在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C 语言具有广泛的库程序支持,是嵌入式系统中应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域中占重要地位。 C++是一种面向对象的编程语言,在嵌入式系统设计中也得到了广泛的应用,如 GNU C++。Visual C++是一种集成开发环境,支持可视化编程,广泛应用于 GUI 程序开发。但 C 与 C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。

选择开发语言,建立交叉开发环境;

根据详细设计说明编写源代码,进行交叉编译、链接;

目标代码的重定位和下载;

在宿主机或目标机调试、验证软件功能;

进行代码的优化。

12.7.8 系统集成与测试

通常嵌入式系统测试主要包括软件测试、硬件测试、单元测试三个部分。

一般系统的硬件测试包括可靠性测试和电磁兼容性测试,关于电磁兼容性目前已经有了强制性国内和国际标准。

嵌入式系统软件测试方法和原理跟通用软件的测试基本一致,软件测试时,一般需要测试实例或测试序列,序列有两种来源:一种是需要用户进行设计,另一种是标准的测试序列。

无论哪种测试实例,都要求实例能够高概率发现更多的错误,但在测试的内容上有些差别:

由于这些差别,使得嵌入式系统软件测试主要集中在以下 4 个不同的方面:

另外,性能测试也是设计嵌入式系统中需要完成的最主要的测试活动之一,对嵌入式系统有决定性的影响。

由于嵌入式系统的专用性特点,系统的硬件平台和软件平台多种多样,每种都针对不同的应用而专门设计,因此,应用软件在各个平台之间很少具有通用性,并且嵌入式系统的更新换代速度相对较快。为了保护已有的投资、充分利用现有的软件资源和加快产品研制速度,软件的移植在嵌入式领域变得非常频繁。