当前位置:Linux教程 - Linux文化 - 实时操作软件主宰PC后产品

实时操作软件主宰PC后产品


如今,嵌入式产品设计师已把嵌入式设计普遍用于专用的、非PC设备之中。我们每天在电话、汽车、家电、玩具、收款机、电子游戏机、保安系统、环境监控和个人电子器具上到处都要用嵌入式处理器,有的甚至每天要与其打上几百次的交道。眼下,第二次浪潮又将来临,因为上述的这些设备要与因特网或本地通信网连接。而且,要使这些产品之间的公共链接具有与用户、外部事件和通信频道实时交换信息的能力。

如果你留心看过十几岁的孩子是怎样玩游戏机的,那你就会明白"实时"是什么意思了。设想,游戏机里编的程序要捕捉到所有标明方向性的移动或枪炮火力的输入信息。与此同时,还要不断地显示更新动作的画面,而且显示的图像还不能让人觉察出计算机的延迟。这就需要实时操作系统(RTOS)确保你的例行程序能及时地响应外部事件并准时进行操作。你要设定优先级和数据的相关性质,用RTOS来管理应用软件,即使是外部的实时活动很不稳定,也能及时捕捉到。你可以独立地编写每个软件程序,不要因为内部作业的定时问题而陷入泥塘。通过例行程序之间的信息互递使用户感觉到,一切都在同时运行。

RTOS像一种高级语言,应该能使开发工作更容易进行,甚至提前完成,但要选择正好适用于嵌入式产品的RTOS,也不是一件轻而易举的事情。与台式机系统可选择品种很有限不同,可供选择的操作系统差不多有200种之多,而每种软件的差异却都很微妙而且难以捉摸。RTOS供应厂家相互的关系也在不断地变化。随着Wind River Systems公司对Integrated Systems公司的收购,两种最流行的RTOS(VxWorks和p SOS)现在已同是一家人。在安装RTOS之前,你应该先了解一下有关诸如调度算法、信号传送特征、存储器要求、等待时间、工具的支持以及价格模型等方面的知识。要不,你想另辟蹊径,冒些风险,撇开市场上的RTOS,自己编写自用的实时例行程序。

硬实时还是软实时?
实时系统自动执行软件程序,或且能自动响应外部事件的作业。RTOS厂家还发明了几个术语,例如,"硬"实时和"软"实时,用以描述它们系统的操作。硬实时系统的时间安排是事先排定的,所以各种作业保证从外部事件的响应起,在精确的时间限度内开始执行。硬实时系统是确定型的。软实时系统通常会排列起始例行程序的平均时间长度,但有一个小的概率,那就是最大的时间会很长。任务要求十分严格的应用项目必须是确定型的。例如,汽车保险气袋控制器、反锁刹车,甚至放在走廊的游戏机等都必须在既定时间内要有反应。软实时的应用项目通常是在几秒之内响应。当然,偶尔也会有慢一些反应的,但问题也不大。

多作业RTOS的基本结构包括一个程序接口、内核程序、器件驱动程序及供选用的服务模块。图1是典型全功能RTOS的框图。内核程序是操作系统的核心,它可提供中断处理程序、作业调度、资源共享标记及存储管理程序。对内核应用编程接口的调用,要求内核的服务。在实时操作期间,内核处于连续工作状态,存储器也必须保持在驻留状态。QNX Software公司的Neutrino操作系统则是采用微内核结构的另一种方法,把传统的内核成份纳入到选项模块。

内核程序的基本功能之一是处理由外部或内部事件引起的中断。当中断发生时,处理器将控制转给登录在中断程序中的中断服务例行程序,并向调度程序发一个消息,然后再返,回正在执行中的程序。中断服务例行程序一般是用汇编语言编写的,这种程序必须很短,因为大多数RTOS在这些程序的执行过程中会禁止全局中断。内核程序也包括设备应用程序执行顺序的调度程序。软件由许多单项作业组成,每项都有其入口点、优先级和堆栈位置。优先级保证级别高的作业先于级别低的作业运行,以保持确定型的响应时间。

RTOS在调度技术上并不完全一样。它们采用先进先出和循环的方法,调度优先级相同的线索。如果作业中没有一个作业的规定时间比组合作业的执行时间短,这个方法就行得通。这种调度方法类似于软件对所有中断输入进行巡回探查。对循环调度技术的简单修改是加入了时间分片,这样,可保证即使在一些作业的完成要很长时间的作业中每个作业都有一定的处理器时间。但是时间分片是在作业之间均等分配处理器时间,无法保证RTOS先执行时间要求严格的那些作业。

最常用的调度技术是抢先作业的排优先级调度法。各种作业可以先占优先级较低的作业。并占用处理器直到作业完成,或直到优先级更高的作业把他们挤开。这种技术要求仔细地分派优先级,以确保各种作业都能准时完成。大多数RTOS厂家都把工具软件包括进去,以分析优先级调度并观察结果。例如,Accelerated Technology公司Nucleus Plus的SurroundView就提供现实运行应用层的数据监控和作业组合画面(图2)。

每次都应准时
调度技术的根本要求是,按任务的规定执行时间定其优先级。这种方法允许调度程序在运行中改变其他作业的优先级,以确保每项任务能准时完成。该法的特点是,在调度安排每项新的任务前,要耗费很多时间去计算完成每项任务的规定时间。到目前为止,动态调度还只限于研究课题和机器人技术试验上。即使是最好的调度算法也会有问题。Mars Pathfinder火星路径探测器项目的RTOS优先级颠倒问题是众所周知的。为了说明这个概念,我们假设一个运行时间长而优先级低的一项任务调用一个优先级高的任务。内核程序把正在运行作业的优先级改为最高优先级子元素的优先级。除非高优先级例行程序已完成,调度程序将优先级复位,否则低优先级任务会阻断中优先级的作业,这样就发生了优先级颠倒。解决这种颠倒问题的一项技术是优先级继承,由调度程序自动重新指定高优先级任务的优先级,使其与调用作业的一样。

除了优先级调度外,实时内核程序也提供作业同步的目标。以执行打印任务的操作为例,如果几个任务同时要求打印,也一定要等到打印机能接收下一个字符为止才行,否则打印出来的东西就会混淆不清。每项任务发出的字符会在打印纸上混在一起。RTOS处理这种情况时有一个目标,叫信号量。使用打印机的第一项任务锁定在相关的信号量上,直到打印完成为止。其他要打印的任务必须等到信号量开锁,才开始执行下一次打印任务。这时优先级最高的任务(或等待时间最长的任务)获得信号量。信号量也可能允许不止一项任务同时使用某个资源。在这种情况下,程序员要起动一个计数的信号量,并规定同时使用的用户数量最多是多少个。

存储器分配也是内核程序的事,这时实时系统的功能有影响。当每项新的任务开始执行时,存储器分配模块就开始搜索够这一项任务用的自由存储器块。根据分散的不同情况,存储器搜索的时间也各不相同,并构成任务转换的等待时间的一部分。幸运的是,大多数RTOS都先有准备,对存储器预留了固定的位置,以跳过这种忽长忽短的搜索时间。对于Green Hills Software公司的Integrity2000型RTOS,作业是在他们自己的存储器分段上运行,申请内核服务时要通过中断机制,防止作业直接存取内核程序,或弄环关键的内核数据结构(图3)。

在如何缩短等待时间,以致不会降低实时系统功能问题上,内核程序的设计是极为重要的。中断等待,是外部事件间到中断例行程序第一条指令间最环的延迟,就像关机停止运行一样。如果处理器中断被起动,硬件延迟会短得多,通常是几毫微秒时间,但随处理器的不同也有所差别。在转向请求中断单元之前,处理器只要求完成现行的指令。如果处理器只有一条中断线,要求巡回探查以决定调用哪一个中断例行程序的时间,就是中断等待时间的一部分。你也可以用应用软件来改变中断等待时间,方法是禁止程序中时间严格部分的中断。例如,如果你禁止中断生成输出引脚上一个已知的脉冲宽度,中断等待时间会至少就与脉冲一样长。

脱离前后关系
内核引起的另一种等待时间,是串联前后任务转换所用时间造成的。每项任务都有一个程序计数器、数据区域指针、寄存器数据及其他状态信息,这些信息内核程序必须为现行作业而保存,为抢先作业而恢复。有些操作系统也要求在前后相关转接被批准前,系统调用要返回应用软件。你可以很容易地用示波器和逻辑分析仪,测出这些等待的平均时间。但是在产品到达用户手上前,那些引起等待时间过长和隐含灾难性等待时间的最环情况组合,却不一定会显现出来。

在内核程序之外,RTOS厂家又加了各种选用模块,诱使你在下一个应用项目中还用他们的产品。例如,几乎每个RTOS都纳入了互连网通信规约,如TCP/IP(传输控制规约/互连网规约)。大多数主要的RTOS厂家,还提供图形用户接口例行程序。用户可以根据应用的实际需要,增加或删去这些模块。最近,QNX Software公司还把多媒体功能扩展到自己的RTOS里,以进入游戏和娱乐的市场。选用模块提供解码功能,以支持流行的音频或视频格式,并与三维效果的插卡接口。RTOS的厂家常与第三方软件开发商结伙,扩大其选项模块的市场。

如果你的应用程序涉及繁重的数据处理,你就应该讨教一下RTOS,它能很容易地按比例化分成多个处理器。你可以把任务分摊给几个处理器,这样,可以明显地提高功效。像雷达和声纳那样的应用项目,光分析信号就要用几百个处理器。Eonic Systems公司的Virtuoso DSP RTOS允许设计师不用过问系统中处理器的数量和连接方法。这种RTOS提供通信和同步服务程序,使多处理变得透明。

大多数RTOS都是为32位处理器设计的。应用的复杂性和多实时输入项目,使软件开发成为庞大的队伍;这对商用RTOS的开发倒是理想的情况。如果你的处理器降一档,只有16位时,如大多数用户是汽车行业,欧洲的制造厂商们则创造了一种为汽车应用服务的瘦型RTOS标准,叫作OSEK(OSEK这几个大写字母取自"Open Systems and interfaces for in-car electronics""车内电器用开放系统和接口")。虽然8位微处理器仍在处理现实生活中绝大多数的实时应用,但却几乎没有8位的RTOS。许多这类系统相当小,完全可以把实时处理纳入应用程序中。不过,也支持8051和6800处理器的商用RTOS。

编写自己的软件
自编的操作系统仍占实时操作系统中相当大的比例。有时一个小的系统生成已多年,还有很多世袭下来的代码程序,很难变成商用产品。设计师们往往坚持要全面控制硬件和软件,声称只有他们才能生产出最小、最便宜而且是速度最快的产品。编写一个实时应用程序也的确是一个不小的工程,是一种不小的挑战。而且,预算资金少、计划周期短,这些因素都在帮RTOS厂家促销他们的软件的大忙。关于RTOS决定是买还是自编的全面讨论,请阅参考文献1。

在选择RTOS时,链锁开发工具是另一个大问题。在开发中,为了能快速地存取编辑程序、编译程序、链接程序、下载程序和运行时使用的工具软件,你会把软件开发和调试的大部分精力,都花在和一体化开发环境(IDE)打交道上。在改变你的IDE之前,一定先要考虑成本,因为一套新的工具,可能会要求一个相当庞大的学习曲线。有一些厂家的工具也可能会成功地配合你的IDE。例如,Mentor Graphics公司的X Ray调试程序是一种很流行的工具,而且已被收集在大全型的链锁工具集中(图4)。参考文献2则汇集了调试程序特性和生产厂家。软件厂家也提供软件功能的分析工具,帮助用户剖析和观察自己软件中的实时活动。许多这类分析工具都带有选择项的,你要仔细考虑,否则会增加你的工具总成本。

在购买时要做的另一个决定是:你是否需要(或想要)厂家的RTOS源代码。有些厂家在你买他们的软件时,就自动提供源码。如果你需要更多的存储器空间,你可以逼迫软件,要它把程序没占用的每一行都腾出来。源代码还会帮助你了解你的应用程序中的那些隐藏障碍。不过,只提供目的代码的厂家宣称,如果你改动了源码,你就生成了一个独特而无法得到支持的RTOS。你应该总是买一份源码副本放在系统的文件中,或提供给你的用户。源码来自Accelerated Technology公司的Nucleus Plus操作系统和Embedded Systems Products公司的RTXC操作系统(www.rtxc.com)。

你可能会惊奇地发现,商用操作系统的价格差别很大。因为像软件这样的商品基本上无法讨论成本,厂家可以调整其价格模型从各种来源以产生收益。厂家可以收取初始许可证费、每位工程师的开发坐位费、开发工具费、按单位计算的专利费、继续支持费、或主要升级费等各种名名目的费用。为了公平地比较价格,你必须计算你考虑之中的每个RTOS所有权的全部成本。你的计算必须包括产品寿命期内你计划分发的单位数量。例如,Green Hill Software公司对购买其编译程序和开发工具的用户,免收VeIOSity RTOS专利费。

展望未来,实时软件会成为今后嵌入式产品的规范。用户要求响应速度更快、功能更强和瞬时数据存取的功能,这些都会加大嵌入式产品的设计难度。典型的项目开发配置要有一个32位的处理器,一个大的软件开发组和一个RTOS。幸运的是,实时产品的厂家会提供多种现成的软件模块,你用不着再费心发明标准功能。所以,请上网选址浏览,选你中意的RTOS,加入实时的革命。


摘自:http://www.oso.com.cn