嵌入式系统是计算机的一种应用形式,通常指嵌入在宿主设备中的
微处理机系统。它所强调的要点是:计算机不为表现自己,而是辅助它所在的宿主设备,使宿主设备的功能
智能化、网络化。通常把嵌入式系统定义为一种以应用为中心,以计算机为基础,软硬件可以剪裁,适用于系统对功能、
可靠性、成本、体积、功耗有严格要求的专用
计算机系统。因此在嵌入式系统中,操作系统和应用软件常被集成于计算机硬件系统之中,使系统的应用软件与硬件一体化。这样,嵌入式系统的硬件与软件需要高效率地协同设计,以做到量体裁衣,去除冗余,在同样的
系统配置上实现更高的性能。
技术特点
嵌入式系统通常包括构成软件的基本运行环境的
硬件和
操作系统两部分。嵌入式系统的运行环境和应用场合决定了嵌入式系统具有区别于其它操作系统的一些特点。
嵌入式处理器
嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式
微控制器、嵌入式
DSP(DigitalSignalProcessor)。嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPC、Motorola68000、ARM系列等等。
嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAM、ROM或两者都有)和其它外设封装在同一片集成电路里。常见的有8051。
嵌入式DSP专门用来对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在
数字滤波、
FFT、
谱分析、
图像处理的分析等领域,DSP正在大量进入嵌入式市场。
微内核结构
大多数操作系统至少被划分为
内核层和应用层两个层次。内核只提供基本的功能,如建立和管理
进程﹑提供文件系统﹑管理设备等,这些功能以系统调用方式提供给用户。一些桌面操作系统,如Windows.Linux等,将许多功能引入内核,操作系统的内核变得越来越大。内核变大使得占用的资源增多,剪裁起来很麻烦。
大多数嵌入式操作系统采用了微内核结构,内核只提供基本的功能,比如:任务的
调度、任务之间的通信与同步、
内存管理、时钟管理等。其它的应用组件,比如网络功能、文件系统、GUI系统等均工作在用户态,以系统进程或函数调用的方式工作。因而系统都是可裁减的,用户可以根据自己的需要选用相应的组件。
任务调度
在嵌入式系统中,任务即
线程。大多数的嵌入式操作系统支持多任务。多任务运行的实现实际是靠
CPU在多个任务之间切换﹑调度。每个任务都有其优先级,不同的任务优先级可能相同也可能不同。任务的调度有三种方式:可抢占式调度、不可抢占式调度和时间片轮转调度。不可抢占式调度是指,一-个任务一旦获得CPU就独占CPU运行,除非由于某种原因,它决定放弃CPU的使用权;可抢占式调度是基于任务优先级的,当前正在运行的任务可以随时让位给优先级更高的处于就绪态的其它任务;当两个或两个以上任务有同样的优先级,不同任务轮转地使用CPU,直到系统分配的CPU时间片用完,这就是时间片轮转调度。
目前,大多数嵌入式操作系统对不同优先级的任务采用基于优先级的
抢占式调度法,对相同优先级的任务则采用时间片轮转调度法。
硬实时和软实时
有些嵌入式系统对时间的要求较高,称之为
实时系统。有两种类型的实时系统:
硬实时系统和
软实时系统。软实时系统并不要求限定某一任务必须在一定的时间内完成,只要求各任务运行得越快越好;硬实时系统对系统响应时间有严格要求,一旦系统响应时间不能满足,就可能会引起
系统崩溃或致命的错误,一般在工业控制中应用较多。
内存管理
针对有内存管理单元(MMU)的处理器设计的---些桌面操作系统,如Windows.Linux.使用了虚拟存储器的概念。虚拟内存地址被送到MMU。在这里,虚拟地址被映射为物理地址,实际存储器被分割为相同大小的页面,采用分页的方式载入进程。一个程序在运行之前,没有必要全部装入内存﹐而是仅将那些当前要运行的部分页面装入内存运行。
大多数嵌入式系统针对没有'MMU的处理器设计,不能使用处理器的虚拟内存管理技术,采用的是实存储器管理策略。因而对于内存的访问是直接的,它对地址的访问不需要经过MMU,而是直接送到地址线上输出,所有程序中访问的地址都是实际的
物理地址;而且,大多数嵌入式操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为它分配足够的连续
地址空间,然后全部载入主存储器的连续空间。
由此可见,嵌入式系统的开发人员不得不参与系统的内存管理。从编译内核开始·开发人员必须告诉系统这块开发板到底拥有多少内存;在开发应用程序时,必须考虑内存的分配情况并关注应用程序需要运行空间的大小。另外,由于采用实存储器管理策略,
用户程序同内核以及其它用户程序在一个地址空间,程序开发时要保证不侵犯其它程序的作,或导致其它程序的运行异常﹔因而,嵌入式系统的开发人员对软件中的一些内存操作要格外小心。
内核加载方式
嵌入式操作系统内核可以在Flash上.直接运行,也可以加载到内存中运行。Flash的运行方式,是把内核的可执行
映像烧写到Flash上,系统启动时从Flash的某个地址开始执行。这种方法实际上是很多嵌入式系统所采用的方法。内核加载方式是把内核的压缩文件存放在F1ash上,系统启动时读取
压缩文件在内存里解压,然后开始执行。这种方式相对复杂一些,但是运行速度可能更快,因为RAM的存取速率要比Flash高。
由于嵌入式系统的内存管理机制,嵌入式操作系统对用户程序采用
静态链接的形式。在嵌入式系统中﹐应用程序和操作系统内核代码
编译、链接生成一个
二进制影像文件来运行。
设计方法
嵌入式系统产生某种动作,以响应外部事件的要求。为了完成这个功能﹐嵌入式系统在软件的控制下通过硬件来高速地获取数据,并进行处理,而后产生响应动作。整个过程是在严格的时间和可靠性的约束下进行的,由于这些约束相当苛刻,嵌入式系统通常只用于满足单方面的应用。
实时特征是嵌入式系统的主要特征。根据截止时间的要求,可将实时分为硬实时和软实时。硬实时要求的响应时间范围很严格,如响应不及时,将产生严重后果。例如,飞行控制、汽车自动刹车等,就要求必须在规定的时间内及时完成所有的处理。软实时的时间限制稍宽,响应时间晚点也可以接受,不致产生严重后果。例如,通信设备中的数字电话交换机等﹐只要求能够有效地处理系统负载。
嵌入式系统通常需要处理不同类型的任务:一类是周期性任务,即按照固定时间间隔执行的任务;另一类是非周期性的任务,常常是随机性任务,要求在任务出现的任意时刻都能进行相应的处理。一般对于非周期性任务的处理都有响应要求,这样当新的事件到来时,即使系统正在处理别的任务﹐也必须及时响应,从而导致了需要同时处理多个互相竞争的请求,包括中断请求。而对于一个连续的头入数据流处理,必须保证其数据不会去失。除此之外要能够响应异步事件,到达序列和数据容量是很难事先预测的。
嵌入式系统与外界有联系﹐因而有可能造成系统
负荷过载。此时,要允许系统性能可以合理降级。由于资源有限,导致有些任务必须等待处理,甚至造成任务丢失。因此,对于不同的任务要根据它们的重要程度和时间约束,来决定其优先处理的次序。原则是保证重要任务。
尽管要求所有软件都必须
可靠。但嵌入式系统在可靠性、重启动和
故障恢复方面有更为特别的要求,而且通常有用于备份的内置冗余。
综上所述,实时嵌入式系统的设计相对于通常的计算机应用设计要复杂得多,涉及面也更为广泛,特别是嵌入式系统的物理尺寸朝着小巧、紧凑的方向发展,更增加了设计的
复杂性,因此,需要对嵌入式系统的设计技术进行较为全面的研究。
典型开发模式
嵌入式系统是一个复杂而专用的系统在进行系统开发之前必须明确定义系统的外部功能和内部软硬件结构;然后进行系统的设计分割分别实现硬件规划与设计应用软件规划与设计以及操作系统的裁剪;在操作系统裁剪和应用软件编码完成后通常还将它们先移植到同系统结构的CPU的硬件平台上进行远程
调试、
功能模拟;完整无误后最后才将操作系统和应用软件
移植到自己开发的专用
硬件平台上完成系统的集成。其开发流程可如图1所示。
完成系统设计分割后软件和硬件开发可以并行进行也可以在完成硬件后在实现操作系统和应用软件的开发。
在以上流程中操作系统的裁剪和应用软件的
编码都是在通用的台式机或工作站上完成的称这样的台式机为宿主机(其操作系统大多为Windows系列Linux或Solaries等);而待开发的硬件平台通常被称为目标机。这种在宿主机上完成软件功能然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试最后目标机在特定环境下脱离宿主机单独运行的系统开发模式称之为宿主机-目标机(Host-Target)模式它是嵌入式系统常采用的一种典型开发模式。
在宿主机-目标机开发模式中
交叉编译和远程调试是系统开发的重要特征。
交叉编译
宿主机上的CPU结构体系和目标机上的CPU结构体系是不同的为了实现裁剪后的嵌入式操作系统和应用软件能在目标机上“跑”起来移植它们之前必须在宿主机上建立新的编译环境进行和目标机CPU相匹配的编译这种编译方式称为交叉编译。新建立的编译环境称之为交叉编译环境。交叉编译环境下的编译工具在宿主机上配置编译实现必须是针对目标机CPU体系的编译工具。只有这样才对源代码编译生成的可执行映像才会被目标机的CPU识别。
远程调试
远程调试是一种允许调试器以某种方式控制
目标机上被调试进程的运行方式并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。调试器是一个单独运行着的进程。在嵌入式系统中调试器运行在宿主机的通用操作系统之上被调试的进程运行在目标机的嵌入式操作系统中调试器和被调试进程通过串口或者网络进行通信调试器可以控制、访问被调试进程读取被调试进程的当前状态并能够改变被调试进程的运行状态。嵌入式系统的交叉调试可分为硬件调试和
软件调试两种。硬件调试需要使用仿真调试器协助调试过程硬件调试器的是通过
仿真硬件的执行过程让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是ROMMonitor、ROMEmulator、In-CircuitEmulator和InCircuitDebugger。而软件调试则使用软件调试器完成调试过程。通常要在不同的层次上进行有时需要对嵌入式操作系统的内核进行调试而有时可能仅仅只需要调试嵌入式应用程序就可以了。
在目标机上嵌入式操作系统、应用程序代码构成可执行
映像。我们可以在宿主机生成上述的完整映像再移植到目标机上;也可以把应用程序做成可加载模块在目标机操作系统启动后从宿主机向目标机加载应用程序模块。交叉开发集成环境(IDE)是嵌入式系统开发的利器可以有效的缩短开发周期。最著名的如美国风河(WindRiver)系统公司的TornadoII。它是一个拥有强大的开发和调试能力的图形界面开发工具包括C和C++远程源码级调试器目标和工具管理器系统目标跟踪以及内存使用分析和自动配置。所有内部工具能方便的同时运行很容易实现交互开发。但大多交叉开发集成环境和嵌入式开发套件配套销售且只支持有限的嵌入式CPU体系价格不菲。采用宿主机-目标机开发模式进行嵌入式系统开发具有整体思路清晰便于系统分工容易同步开发的特点是嵌入式开发人员较理想的开发方式。作者目前已经启动的一个嵌入式医疗仪器开发项目就是采用宿主机-目标机模式预计将在一年内完成。
应用领域
工业控制领域
基于嵌入式芯片的工业自动化设备获得长足的发展,如工业过程控制、数宇相床、电力系统、电网安全、电网设备监测、石油化工系统。就传统的
工业控制产品而言,低跨型采用的往往是6位单片机,随着技术的发展,32位、64位的处理眼逐渐成为工业控制设备的核心。
交通运输与管理领域
在车辆导航、流量控制、信息监测与汽车服务方面,嵌入式系统技术已经获得了广泛的应用,内嵌GPS模块,
GSM模块的移动定位终端已经在各种运输行业获得了成功的使用,目前
GPS设备已经从尖端产品进入了普通百姓的家庭。
机器人领域
嵌入式系统和机器人技术的普及和发展,使其在军事、工业、家庭和医疗等领域获得更广泛的应用。
国防军事领域
嵌入式技术在军事国防领域有重要应用。20世纪70年代,嵌入式计算机系统应用在武器控制系统中,后来用于军事指挥控制和通信系统。在各种武器控制装置(火炮、导弹和智能炸弹制导引爆等控制装置)、坦克、舰艇、轰炸机、陆海空各种军用电子装备、雷达、电子对抗装备、军事通信装备、野战指挥作战用各种专用设备等中,都可以看到嵌入式系统的身影。使用嵌入式技术的武器曾为美军在伊拉克战争中发挥重要的作用。
医疗仪器领域
嵌入式系统在医疗仪器中的应用普及率极高,现代数字医疗仪器设备不但包括诊疗设备,而且还有数据存储服务器和接口软件,嵌入式系统可为医疗仪器设备设计、生产和使用提供先进的技术支持。
航空航天领域
在
航空航天领域,嵌入式系统具有广泛而重要的应用。在
飞行控制、
通信、
导航和
安全等方面发挥着关键作用,保证了飞行器的
稳定性、
安全性和
可靠性。随着技术的不断进步和创新,嵌入式系统在航空航天领域的应用前景将更加广阔。
前景与发展趋势
嵌入式系统作为计算机系统的重要组成部分,广泛应用于各个行业和领域。随着物联网(IoT)、人工智能(AI)、5G 通信技术等新兴技术的发展,嵌入式系统的应用前景将变得更加广泛和深入。以下是嵌入式系统的主要应用前景和发展趋势:
1. 物联网(IoT)与智慧城市
嵌入式系统是物联网的核心组件,能够在各种设备中实现连接和数据处理。随着物联网技术的普及,嵌入式系统在以下几个方面具有广泛的应用前景:
2. 智能汽车与自动驾驶
汽车行业正经历着自动化和智能化的转型,而嵌入式系统在这一过程中起着关键作用:
3. 医疗与健康
嵌入式系统在医疗设备和健康监控领域有着重要的应用前景:
4. 工业自动化与机器人
嵌入式系统在工业自动化和机器人技术中的应用越来越重要:
5. 消费电子
嵌入式系统在消费电子领域有广泛的应用,尤其是在智能手机、智能音箱、智能电视等设备中:
6. 航空航天与国防
嵌入式系统在航空航天和国防领域也具有重要应用:
7. 能源与环境监测
嵌入式系统在能源管理和环境保护方面具有重要应用:
8. 5G 和边缘计算
随着 5G 通信技术的推广,嵌入式系统将在边缘计算和高速通信中发挥越来越重要的作用: