
1.1.1 嵌入式系统的组成
嵌入式系统可分为硬件和软件两部分。硬件一般由高性能的微处理器和外围的接口电路组成,软件一般由硬件抽象层、操作系统、板级支持包、应用平台和应用程序组成。图1-1给出了嵌入式系统的示意图。

图1-1 嵌入式系统的组成
并非所有嵌入式系统都包含这些部分,有些系统没有操作系统,有些系统没有应用平台。更多时候是设计人员将这几个软件部分组合在一起的:应用程序控制系统的运作和行为,操作系统控制着应用程序与硬件的交互。这种设计方式更有利于程序与硬件、程序与程序的交互,从而提高整个嵌入式系统的处理速度。嵌入式操作系统具有相对不变性,而不同的系统需要设计不同的嵌入式应用程序。
1. 硬件层
硬件是嵌入式操作系统和应用程序运行的平台,包括输入输出接口/驱动电路、处理器、存储器、定时器、串行通信端口、中断控制器、并口、外设器件、图形控制器及相关系统电路等。
不同的应用通常有不同的硬件平台,硬件平台的多样性是嵌入式系统的主要特点。
2. 中间层
硬件抽象层(HAL)负责为各种硬件功能提供软件接口,包括硬件初始化、硬件时钟、中断板级支持包、计时器时钟、总线管理、内存地址映射等。
中间层是介于硬件与软件之间的中间层次。如果有操作系统,则它在硬件与操作系统之间,称为硬件抽象层,通过特定的上层接口与操作系统进行交互,主要对系统基础硬件提供初始化和软件接口,而一些设备驱动则是在操作系统之上提供,它的引入大大推动了嵌入式操作系统的通用化;如果没有操作系统,则称为板级支持包(BSP),它提供对所有硬件,包括各种设备的初始化和驱动。
每个HAL/BSP包括一个ROM启动(Boot ROM)和其他启动机制。
3. 软件层
1)嵌入式操作系统:实现对资源的访问和管理,完成任务调度,支持应用软件的运行和开发。
2)板级支持包(Board Support Package,BSP):BSP针对某一个特定嵌入式系统提供与硬件相关的设备驱动。每个BSP包括一套模板,模板中包含设备驱动程序的抽象结构代码、硬件设备的底层初始化代码等。通常这些设备驱动在系统初始化过程中由BSP按操作系统中的设备驱动程序与它们相关联,随后,由通用设备驱动程序调用,实现对硬件设备的控制。另外,BSP还参与了嵌入式系统初始化及硬件初始化的过程。板级支持包是嵌入式应用开发中的关键环节。
某些嵌入式操作系统包含设备驱动,但有许多设备驱动仍需要开发者自己编写。因此在嵌入式软件行业一直存在一个争论:板级支持包究竟是不是嵌入式操作系统的一部分?不管它是不是操作系统的一部分,可以肯定的是,板级支持包是嵌入式软件中一个不可分割的部分,它在为整个嵌入式系统服务。
3)应用平台:为了提高软件开发速度、提升软件质量,一些应用提供商开发了可重用的应用平台。平台封装了一些常用的功能,提供API接口,可以在此基础上进行二次开发。例如,为开发手机应用提供的BREW平台,不仅包括开发用的SDK,还有运行在操作系统之上的应用运行环境(AEE),它为基于BREW平台开发的应用提供了一个全功能的实时运行环境。
4. 功能层
应用程序:软件是嵌入式系统的核心部分,是根据特定的需求量身定做的、在相对固定的环境下完成特定任务的应用程序。这些处理过的指令代码和数据被放置于存储器中以执行任务。产品的最终机器可以将软件嵌入ROM(或PROM)中。所以,最终阶段软件也被称为ROM映像。
功能层位于嵌入式系统层次结构的顶层,直接与最终用户交互,决定整个产品的成败。其质量及可靠性依赖于应用程序的设计质量、资源使用情况以及与操作系统耦合的程度。嵌入式应用程序与通用计算机程序相比主要存在以下不同:
1)嵌入式系统程序设计过程中,针对功能差异较大的硬件层、操作系统层、BSP层、应用平台层,不仅要设计适当,而且要系统集成。
2)各层之间的响应时间有严格要求。
3)存储器、电源等资源有限,须优化使用。
4)测试要求更为严格。
除上述内容之外,嵌入式软件的开发过程也必须符合软件工程的各种标准。