第2章
嵌入式系统的软件组成
嵌入式系统包括硬件平台和软件平台两部分,其软件平台是由嵌入式操作系统和相应的应用软件组成。在现今硬件技术大幅度进步的情况下,软件部分反而有着极大的成长空间,软件的开发技术成为嵌入式系统中最为重要的一环。
2.1
嵌入式操作系统
作为嵌入式系统灵魂的嵌入式操作系统是随着嵌入式系统的发展而出现的。嵌入式操作系统的出现,大大提高了嵌入式系统开发效率,一改以往嵌入式软件设计只能针对具体的应用从头做起的历史。在嵌入式操作系统之上开发嵌入式系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性,可以说嵌入式操作系统的出现为嵌入式系统的发展铺平了道路。
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
一般情况下,嵌入式操作系统可以分为两类。一类是面向控制、通信等领域的实时操作系统,如
WindRiver公司的VxWorks, ISI的pSOS, QNX系统软件公司的QNX和老牌的VRTX(Microtec公司)等。另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(PDA)、移动电话、机顶盒、电子书、WebPhone等。随着Internet及芯片技术的快速发展, 消费电子产品的需求日益扩大,原来只关注实时操作系统市场的厂家纷纷进军消费电子产品市场,推出了各自的解决方案,使嵌入式操作系统市场呈现出相互融合的趋势。
2.1.1
实时操作系统(RTOS)概述
实时操作系统是指具有实时性,能支持实时控制系统工作的操作系统。实时操作系统的首要任务是调动一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的工作效率,其重要特点是通过任务调度来满足对于重要事件在规定时间内作出正确的响应。
实时操作系统
(RTOS)是嵌入式应用软件的基础和开发平台。RTOS是一段嵌入在目标代码中的软件,用户的其他应用程序都建立在RTOS之上。不但如此,RTOS还是一个可靠性和可信性很高的实时内核,将CPU时间、中断、工/0、定时器等资源都包装起来,留给用户一个标准的API,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。
实时操作系统
(RTOS)的研究是从六十年代开始的。从系统结构上看,实时操作系统到现在己经历了如下三个阶段:
(1)早期的实时操作系统
早期的实时操作系统,还不能称为真正的实时操作系统,它只是小而简单的、带有一定专用性的软件,功能较弱,可以认为是一种实时监控程序。这个时期,应用程序、实时监控程序和硬件运行平台往往是紧密联系在一起的。
(2)专用实时操作系统
随着应用的发展,早期的实时操作系统己越来越显示出明显的不足。有些实时系统的开发者为了满足实时应用的需要,自己研制与特定硬件相匹配的实时操作系统。它一般只应用于特定的硬件环境,且缺乏严格的评测。移植性也不太好。
(3)通用实时操作系统
在各种专用实时操作系统中,一些多任务的机制如基于优先级的调度、实时时钟管理、任务间的通信、同步互斥机构等基本上是相同的,不同的是面向各自的硬件环境与应用目标。实际上,相同的多任务机制是能够共享的,因而可以把这部分很好地组织起来,形成一个通用的实时操作系统内核。这类操作系统大多采用软模块结构,以一个个软件“标准模块”构成通用的实时操作系统。一方面,在实时操作系统内核的最底层将不同的硬件特性屏蔽掉
:另一方面,对不同的应用环境提供了标准的、可剪裁的系统服务软模块。这使得用户可以根据不同的实时应用要求及硬件环境选择不同的软模块,也使得实时操作系统开发商在开发过程中减少了重复。它们一般都提供了实时性较好的内核、多种任务通信机制、基于TCP/IP的网络模块、文件管理及1/O服务,提供了集编辑、编译、调试、仿真为一体的集成开发环境,支持用户使用C, C++进行应用程序的开发。
总的来说,一个成熟的
RTOS必须具备以下几个功能:
l 任务管理
l 任务间同步和通信
l 内存管理
l 实时时钟服务
l 中断管理服务
以上五点是任何一个
RTOS都必不可少的重要功能,对于任何一个RTOS来说虽然具有这五个基本功能还算不上是一个优秀的实时操作系统,但一旦缺少其中任何一个它都算不上是一个完整的实时操作系统。
2.1.2
嵌入式实时操作系统的概念
嵌入式系统与通用计算机不同,应用程序可以没有操作系统而直接在芯片上运行,但是为了合理的调度多任务、利用系统资源,系统一般以成熟的实时操作系统作为开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保证软件质量。
实时系统是实时计算机系统的简称。实时系统是对外来事件在限定时间内能做出反应的系统,限定时间的范围很广可以从微秒级到分级。从实时系统的应用特点的角度可以将实时操作系统(
RTOS)划分为两种类型:一般实时操作系统和嵌入式实时操作系统。
嵌入式系统一般都是实时系统,实时系统也大都是用在嵌入式环境。用于嵌入式场合的实时操作系统就是嵌入式实时操作系统。在一个较为完善的嵌入式系统环境中,需要一个支持实时多任务的操作系统内核,因为广泛应用于现实世界的嵌入式设备必须具有与外部环境实时交互的能力。实时多任务操作系统是指具有实时性、能支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。嵌入式实时操作系统是和嵌入式应用复杂化直接相关的,在应用需求的复杂度不断增加的今天,如果实时应用软件开发还是没有基于一个完善的嵌入式实时操作系统,那么无法将系统软件和应用软件分离,开发周期过长、成本过高。因此嵌入式实时操作系统是实时应用软件开发的必然产物。
2.1.2
使用嵌入式实时操作系统的必要性
嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。
首先,嵌入式实时操作系统提高了系统的可靠性。在控制系统中,出于安全方面的考虑,要求系统起码不能崩溃,而且还要有自愈能力。不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠的隐患。长期以来的前后台系统软件设计在遇到强干扰时,使得运行的程序产生异常、出错、跑飞,甚至死循环,造成了系统的崩溃。而实时操作系统管理的系统,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时采取一些利于系统稳定可靠的措施,如把有问题的任务清除掉。
其次,提高了开发效率,缩短了开发周期。在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其他模块。商业软件一般都提供了良好的多任务调试环境。
再次,嵌入式实时操作系统充分发挥了
32位CPU的多任务潜力。32位CPU比8、16位CPU快,另外它本来是为运行多用户、多任务操作系统而设计的,特别适于运行多任务实时系统。32位CPU采用利于提高系统可靠性和稳定性的设计,使其更容易做到不崩溃。例如, CPU运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出CPU的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。如果还是采用以前的前后台方式,则无法发挥32位CPU的优势。
从某种意义上说,没有操作系统的计算机
(裸机)是没有用的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。
2.1.3
嵌入式实时操作系统的优缺点
在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化;而且对实时性要求苛刻的事件都得到了快速、可靠的处理。通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。
但是,使用嵌入式实时操作系统还需要额外的
ROM/RAM开销,2~5%的CPU额外负荷,以及内核的费用。
2.1.4
嵌入式实时操作系统的发展方向
近十年来嵌入式实时操作系统得到飞速的发展,从支持8 位微处理器到16位、32 位甚至64 位从支持单一品种的微处理器芯片到支持多品种微处理器芯片, 从只有实时内核到除了内核外还提供其他功能模块如:文件系统TCP/IP 网络系统GUI 图型系统等。目前嵌入式实时操作系统及其应用开发环境的发展动向是:
1. 嵌入式实时操作系统正向实时超微内核开放发展
八十年代后期国外提出了微内核(Microkernel)的思想 即将传统操作系统中的许多共性的东西抽象出来构成操作系统的公共基础即微内核真正具体的操作系统功能则由构造在微内核之外的服务器实现这是一种机制与策略分离的开放式设计思路近几年国外发展了一种基于微内核思想设计的精巧的嵌入式微内核即实时超微内核(Nanokernel) 超微内核是一种非常紧凑的基本内核代码层, 为嵌入式应用提供了可抢占, 快而确定的实时服务, 在它的基础上可以灵活地构造各种类型的与现成系统兼容的可伸缩的嵌入式实时操作系统因此能满足应用代码的可重用和可伸缩性(scalability)的需求Microtec 已首先推出了基于实时超微内核的嵌入式实时操作系统VRTXsa 它与VRTX32 兼容并具有更强的功能实时性和可靠性有了很大的改进
2 开发环境向开放的集成化的方向发展
由于嵌入式应用软件的特殊性往往要求应用程序设计者具有一定的实时操作系统的专门知识能合理地划分任务合理的配置系统以及目标联机的调试因此要设计实现一个高性能的实时应用软件需要强有力的交叉开发工具系统的支持国外十分重视发展与实时操作系统配合的嵌入式应用的集成开发环境现已发展到第三代它以客户服务器的系统结构为基础具有运行系统的无关性连接的无关性开放的软件接口(与嵌入式实时操作系统, 与开发工具, 与目标环境的接口) 环境的一致性宿主机上的目标仿真的特点1993 年, MICROTEC 推出了世界上最先进的第三代嵌入式集成交叉开发系统Spectra(现称为VRTX 开发系统) 该系统可在UNIX 及WINDOWS NT 上建立起开放的网络环境的交叉开发平台能将多来源的开发工具有机地结成一体对复杂的嵌入式应用开发提供全过程支持
3 完整的解决方案
RTOS 厂家本身或与其他软件公司和半导体公司配合为典型应用提纲解决方
案 如
PDA 机顶盒路由器等综上所述嵌入式实时操作系统及其应用开发环境正向开放集成发展
2.1.5
几种流行的嵌入式操作系统
20世纪
80年代初期嵌入式操作系统的出现使得快速便捷地开发规模较大的嵌入式系统成为现实,自这一时期开始就出现了各种各样的嵌入式操作系统,从而形成了目前多种形式的嵌入式操作系统百家争鸣的局面。以下是几种流行的嵌入式操作系统。
Windows CE是
Windows的嵌入式版本,可以与Windows环境下的软件方便地接口。它是为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。
VxWorks是目前嵌入式系统领域中使用最广泛,市场占有率最高的系统。它支持多种处理器。使用的是和
UNIX不兼容的环境,大多数的VxWorks API是专用的。
pSOS 是一个模块化高性能的实时操作系统,专为嵌入式处理器设计,提供一个完整的多任务环境,具有高性能和高可靠性。可以让开发者将操作系统的功能和内存需求按每个应用的需要定制成专门的系统。
QNX是一个实时的可扩充的操作系统,它提供一个很小的微内核及一些可选的配合进程。它的结构灵活且运行速度极快。
Palm OS在
PDA市场上占有很大的市场份额,他有开放的操作系统应用程序接口,开发商可以自行开发所需要的应用程序。
eCOS是一个代码开放的嵌入式操作系统,具有良好的系统功能和应用支持,可以在许多高级单片机上运行。
RTX51是专门针对
8051设计的操作系统,代码紧凑、体积小巧。
μ
CLinux是一个缩减的Linux系统,特别适用于在不需要内存管理的高级单片嵌入系统上。
μ
C/OS是一个特殊风格的嵌入式操作系统,他有多种版本,可以适应从X86到8051的各种不同类型不同规模的嵌入式系统,代码开放。μC/OS-II是其升级版本。
2.2
嵌入式系统应用软件的开发
嵌入式软件开发和通用计算机的应用软件开发的最大差异就是它需要两个平台:一个是开发平台(宿主机),另一个是目标平台(目标机),其关系如图
2.1所示,这是因为嵌入式系统的目标机由于受到资源限制,不可能建立庞大、复杂的开发环境。
嵌入式应用软件开发的每一步都是在
PC机上进行,我们称这样的PC机为宿主机,称运行目标代码的机器为目标机。主机提供支持程序开发的开发环境和开发工具,包括编辑器,编译器和连接器等。嵌入式软件开发流程如图2.2。
首先利用宿主机上丰富的资源以及良好的开发环境和仿真功能,分别进行应用程序的编辑和编译,生成目标文件,然后进行统一的连接生成可执行文件,然后启动交叉编译
(是指在宿主机上编译出可以在目标机上执行的程序的编译过程)环境进行调试,编译成功后,通过串行通讯口将可执行代码传输并装在到目标机上。最后目标机在特定的应用环境下运行。
编译:将
C/C++源程序以及汇编语言源程序通过交叉编译环境转变为目标文件。
连接:将交叉编译环境产生的目标代码组织成可执行代码。
调试:利用宿主机的仿真功能运行生成的可执行代码,看是否存在错误。
下载:把调试成功的可执行代码刻录到目标机的
ROM中的过程。