嵌入式系统软件组成

第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比八、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中的过程。