1.1.1 什么是嵌入式系统
什么是嵌入式系统呢?目前对嵌入式系统的定义主要有两种。
第一种定义是传统的定义:嵌入其他设备中,起智能控制作用的专用计算机系统。也可以说,它是任意包含可编程计算机的设备,但是这个设备不是作为通用个人计算机而设计的。一台通用个人计算机不能被称为嵌入式系统,尽管有时会把它嵌入某些设备中。而一台嵌入数控机床里的控制器可以算作嵌入式系统。
第二种定义是目前比较流行的:以应用为中心,以计算机技术为基础,并且软硬件可裁减、软件固化的专用计算机系统。例如:数码相机、GPS(Global Positioning System,全球定位系统)导航仪就体现了这种特点,因此它们能被称为嵌入式系统;而笔记本计算机没有体现这种特点,因此它不能被称为嵌入式系统。
无论采用哪种定义来描述嵌入式系统,可以确定的是,嵌入式系统本质上是计算机系统。它是计算机系统的一种体现形式,因为它的硬件由微处理器、存储器、I/O部件组成,并且是由存储的指令来控制任务的执行,只不过它与应用目标紧密结合,硬件结构中的组成部件需要根据应用目标来定制,同时软件结构中的软件功能模块也需要定制。
我们可以把嵌入式系统的特征归纳如下。
(1)嵌入式系统与应用目标紧密结合,硬件组件需要定制(或称硬件裁减)。也就是说,设计者需要根据自己所设计的嵌入式系统的功能要求,自行设计硬件电路。除设计通用的电路,如微处理器与存储器的接口电路、时钟电路(或称晶振电路)、复位电路等之外,还需要设计一些专用部件的电路,如在设计、开发GPS导航仪时,设计者需要设计能够接收卫星定位信号的GPS模块的接口电路。
(2)嵌入式系统的软件组件也需要定制(或称软件裁减)。也就是说,设计者需要根据应用的功能要求,确定所设计的嵌入式系统是否需要操作系统作为软件平台,并设计专用的软件功能模块。通常情况下,如果嵌入式系统的应用软件可以设计成单任务形式,并且不需要具有图形化人机交互界面、以太网通信等复杂功能,那么设计应用软件时无须将操作系统作为软件平台。但如果嵌入式系统应用功能要求复杂,如需要处理多媒体信息、需要以太网通信功能等,那么其应用软件的开发通常需要基于某个操作系统(如Linux)来进行,这样可以缩短嵌入式系统的开发周期。若需要将操作系统作为软件平台,设计者还需要结合所设计的硬件结构,完成操作系统的移植和裁减,使操作系统能在该硬件环境下有效地运行。
(3)嵌入式系统的所有软件组件均需要存储在非易失性存储器中。把运行代码写入非易失性存储器中的过程叫作“软件固化”,这样可保证程序代码及数据在嵌入式系统断电以后不会丢失,从而保证嵌入式系统再次开机时能够正常运行。由于嵌入式系统中通常不用磁盘,而采用存储器作为系统的程序代码及数据的存储介质,因此嵌入式系统中软件固化是必需的。
(4)相对于通用个人计算机来说,嵌入式系统的硬件、软件资源受限。因为嵌入式系统通常对某些非功能性指标,如成本、体积、功耗等,有比较严格的要求,甚至到了苛求的地步,所以嵌入式系统的硬件、软件资源通常只要能满足应用需求即可,而没有更多的冗余。
由于与通用个人计算机比较而言,嵌入式系统有上述的几点特征,因此,嵌入式系统的设计、开发方法与通用个人计算机的应用系统的设计、开发方法相比,有以下几点不同。
(1)需要软硬件一体的设计理念。在嵌入式系统设计阶段,设计者需要根据应用功能需求,结合成本、体积、功耗等非功能性需求,综合考虑哪些功能由硬件完成、哪些功能由软件完成,并在开发实施阶段,根据硬件结构的具体情况,设计适用于该硬件结构的软件。
(2)需要系统软件与应用软件融合设计。系统软件通常是指管理及控制系统资源的软件,而应用软件是指具体实现用户所需功能的软件。嵌入式系统设计时,设计者往往需要完成系统软件和应用软件两部分的设计工作。例如:若嵌入式系统无操作系统,那么设计者除了要设计应用软件外,还要设计监控、管理硬件资源的软件,这两部分软件的代码通常融合在一个循环结构中;若嵌入式系统需要操作系统,那么设计者即使不设计操作系统,也需要完成操作系统的移植和裁减,并在完成应用软件的设计时,完成一些非标准的硬件接口驱动程序设计。
(3)需要建立交叉开发环境。嵌入式系统由于受到资源的限制,通常软件的开发环境与运行环境是不同的。也就是说,嵌入式系统开发时,需要借助通用个人计算机(称为宿主机)来完成嵌入式系统的软件编辑、编译、链接等工作,生成可执行文件;而运行时,必须把可执行文件下载到嵌入式系统(称为目标机)上,在宿主机上是不能直接运行的。这种宿主机-目标机的开发架构被称为交叉开发环境。
综上所述,嵌入式系统的设计与通用个人计算机应用系统设计的主要差别体现在设计手段和设计者需具备的技能上。嵌入式系统的设计者更需具备软硬件一体的综合设计技能。