访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
嵌入式RTOS讲座(1)
内容导读:
[编者按] RTOS是开发计算机嵌入式应用产品的有力工具,研究和掌握RTOS的思想方法有益于提高开发人员的水平,从而缩短产品开发周期、提高产品质量。从本期起,学习园地将连载《嵌入式RTOS讲座》,主要内容如下:什么是嵌入式RTOS;RTOS中的一些基本概念;介绍一个源码公开的实时内核;在PC机上实现该实时内核的运行;让该实时内核在8位单片机上运行;如何将该实时内核移植到32位CPU上。嵌入式RTOS讲座(1) 什么是嵌入式实时操作系统清华MOTOROLA单片机应用开发研究中心邵贝贝许庆丰王若鹏一、 计算机的操作系统最早的计算机诞生于20世纪40年代中期。哈佛大学的Howard Aiken、普林斯顿高等学院的John Von Neumann等成功地用真空管建造了计算机。当时的操作主要是针对硬件的,连汇编语言都没有,更不用提软件设计以及操作系统了。到了50年代,晶体管的发明大大减小了计算机的体积,并提高了计算机的可靠性,出现了能够大批量生产的机器,如IBM 1404、IBM 7094等,推动了设计人员、生产人员、操作员、程序员和维护人员的分工。这时,FORTRAN语言和汇编语言被用于解决科学计算问题,并出现了一些批处理系统,如FMS FORTRAN监控系统、IBM 7094机的IBSYS系统。60年代中期,集成电路制造工艺大大提高计算机硬件的性能价格比。IBM推出了一系列软件兼容的计算机,组成IBM360系列机,其中包括许多性能档次。这时软件也有了突破性进展,终于在1962年诞生了第一个分时系统CTSS。随着人们对操作系统的逐步深入理解,又出现了MULTICS、UNIX等非常成功的分时操作系统。 UNIX是多用户、多任务的操作系统。在小型、中型乃至大型计算机上,几十人甚至上百人同时使用一台计算机,作各类应用,长年累月运行而不会死机。操作系统可以说是计算机的灵魂。只有硬件,没有操作系统的计算机称作裸机。裸机是不能用的,也是没有用的。 60年代以来,UNIX操作系统的研究与发展使之达到了几乎完美的程度。它是世界上无数优秀的计算机专家们数十年智慧的结晶。从80年代初到现在,计算机的发展已经进入第四代。大规模集成电路工艺带来了低成本、高性能的个人计算机,并且普及率大大提高。这时的操作系统有三个分支:一是主要用于个人机和工作站上的微软MS\ DOS、Windows 98、Windows NT;二是在工作站和高档机上占统治地位的UNIX;三是网络操作系统和分布式操作系统。一台计算机上可以有多种软件,操作系统是其中最基本、最主要的软件。它控制计算机的资源并提供开发应用程序的基础。图1表示了操作系统在整个计算机中的地位。对操作系统的概念,可以从两个方面去理解。一是面对应用程序的部分,它将硬件细节与程序员隔离开来,使编程工作不用总是涉及底层硬件,相当于为用户提供了一台等价的虚拟机;另一方面,操作系统必须用物理硬件能够明白的语言来操纵各种资源,如处理器、存储器、时钟、磁盘、打印机等等,从这种意义上讲,它更像一个资源管理器。应用程序编辑器〖〗编译器〖〗命令解释器操作系统机器语言微程序物理设备[] 系统程序 硬件图1计算机系统的组成二、 什么是实时操作系统实时操作系统,简称RTOS(Real Time Operating System)。UNIX是分时系统,定时器的优先级最高。以UNIX为基础,允许对中断处理的优先级做些调整,使系统对外部事件的响应速度保证不大于某一特定的时间间隔,就构成了实时系统,如Lynx、OS\ 9等操作系统。如果操作系统能做到不死机,且响应速度有保证就可以用于各种控制目的了。用于控制目的时,多任务是必要的,而多用户往往并不需要,尤其是在嵌入式应用中。因此可以将UNIX多用户那部分功能去掉,并根据嵌入式应用的特点,舍弃一部分不必要的功能,以适应嵌入式应用中要求占用内存少的特点,这就是嵌入式多任务实时操作系统。在这里,“操作”二字已经失去了本来的含义。 RTOS的开发工具允许用户针对不同的应用对象对RTOS的内核进行裁剪、压缩,以适应各类应用,并提供应用程序的调试环境。从理论上讲,无论UNIX还是基于UNIX思想的RTOS,都包含了计算机软件理论最精华的那一部分。从实践上说,它们亦是被无数应用系统证明是完全成功的。实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且跟这些操作进行的时间有关。“在确定的时间内”是这个定义的核心。也就是说,实时系统是对响应时间有严格要求的。例如,一个视频播放系统要从CD\ ROM中读取高压缩率的数据,并将其解压缩,送到显示设备。解压缩的工作必须在很短的时间(毫秒级)内完成,否则会出现画面的不连续。假设图像每帧的停留时间为30ms,那么该系统必须在这段时间内将下一帧从CD\ ROM中读出并完成解压缩。30ms就成为一个时间限制,每次处理均在30ms内就是实时的,一万次处理有一次处理时间大于30ms也不是好的实时系统。一个系统具有实时性并不说明该系统的响应和处理速度非常快;而一个高速系统也未必是实时系统。特定的实时系统有其具体的时限(或速度)要求,该时限要求对不同系统千差万别。高能粒子甄别系统的甄别处理要求在微秒或纳秒级时间内完成;而实时数据库查询系统仅要求在用户键入请求后几秒内得到查询结果。所以设计实时系统之初,应该明确目标系统的实时要求是秒级的,还是毫秒、微秒级的,避免盲目追求高速度,造成浪费。实时系统通常分为硬实时和软实时系统。前者意味着存在必须满足的时间限制,而后者意味着偶尔超过时间限制是可以容忍的。实时操作系统是基于计算机的,是管理计算机硬件资源并提供人机命令或编程接口的系统,它能在固定的时间内对一个或多个由外设发出的信号做出适当的反应。与普通(分时)操作系统不同,实时操作系统强调了系统对外部异步事件响应时间的确定性,这已经逐渐接近嵌入式系统的设计思想了。实时操作系统和分时操作系统的另一个重要区别在于二者的任务调度方式不同。常见的分时调度算法有时间片轮转调度、优先级调度、多重队列、最短作业优先、保证调度算法以及彩票调度算法。这里不详细描述这些算法。实时调度算法主要有三种,比较经典的是事件发生率单调算法(Liu和Layland,1993)。该算法事先为每个任务分配一个与事件发生频率成正比的优先级,调度程序总是调度优先级最高的就绪任务,必要时将剥夺当前任务的CPU使用权,让高优先级的任务先运行。这种算法被证明是最优的,也是为大部分实时内核所采用的调度方式。另一种流行的实时调度算法是最早截止优先算法。当一个事件发生时,对应的任务被加到就绪队列中,该队列按照截止期限排序,截止期限最短的优先级最高。对周期性事件,截止时间即为事件下次发生的时间。第三种算法首先计算各任务的富裕时间,称作裕度(laxity)。如果一个任务需要运行200ms,而它必须在250ms内完成,则其裕度为50ms。该算法称为最少裕度法,即选择裕度最少的任务。尽管通过这三种算法中的任何一个都可以将分时操作系统转化为实时操作系统,但实际上,由于前者的任务切换时间太长,实时性能都比较低,所以实时系统一般都采用专用的实时操作系统。这些实时操作系统的主要特征有: · 规模小; · 中断被屏蔽的时间很短; · 中断处理时间短; · 任务切换很快。常见的实时操作系统有VxWorks、VRTX/OS、pSOS+、RTMX、OS/9和Lynx OS等等。三、 嵌入式实时操作系统大多数实时系统是嵌入式系统。在这种系统中,计算机被内装于专用设备或系统中,它的反应速度快,自动化程度高。用户不知道装置内计算机的存在,一般不能进行用户编程,不像普通计算机那样提供了许多便利的用户接口和软件工具。嵌入式应用软件的开发也是通过交叉开发来实现的,即开发环境和实时运行环境是不同的。一般意义上的计算机操作系统是服务于计算机用户的,而嵌入式实时操作系统是服务于嵌入式应用产品的开发人员的。嵌入式实时操作系统的精华在于向开发人员提供一个实时多任务内核。开发人员将应用分解成若干个独立的任务,将各任务要做的事、任务间的关系向实时多任务内核交代清楚,让实时多任务内核去管理这些任务,开发过程就完成了。一般意义上的计算机操作系统有以下4方面的内容: · 外存管理(也叫文件管理); · 内存管理; · 任务管理(也叫进程管理); · I/O管理。嵌入式实时操作系统没有操作系统的文件系统等庞大内容,一般也不需要内存管理,它所具有的是实时操作系统中最为重要的内容,即多任务实时调度和任务的定时、同步操作。其二进制代码的大小一般只有几KB,是纯粹为嵌入式应用而设计的,具有很短的任务切换时间和实时响应速度。嵌入式实时操作系统的精华是实时多任务内核。让我们用个形象的比喻说明RTOS在嵌入式实时系统中的地位:实时内核好比一颗行星,诸任务就像围绕行星旋转的许多卫星,在内核的管理下,有条不紊地运转着。任意时刻,处于运行状态的任务只有一个,其他任务则处于另外的状态,如睡眠、等待、就绪等。四、 嵌入式应用中使用RTOS的必要性提倡在嵌入式应用中使用RTOS的最主要原因是提高系统的可靠性。尤其是控制系统,“不死机”是最起码的要求。在系统的硬件设计上尽量提高抗干扰能力,满足电磁兼容性要求只是一方面,另一方面就是在软件上采取的措施。长期以来,国内传统的开发方式是:针对某一应用,画程序流程图、编制应用程序。这种程序可以称之为线性程序。在遇到强干扰时,程序在任何一处产生死循环或破坏都会引起死机,受到强干扰时只能依靠硬件的最后防线——看门狗复位,重新启动系统;而对于RTOS管理的系统,这种干扰可能只是引起若干进程中的一个被破坏,可以用另外的进程对其进行修复。不仅可以将应用程序分解成若干独立的进程,而且可以另外启动一个监控进程,监视各进程运行状况,遇到异常情况时采取一些措施,像在UNIX中将有问题的进程Kill掉。在UNIX的讨论中,普遍使用进程(process)这一概念,而在嵌入式RTOS的讨论中使用任务(task)的概念则更明确。提倡使用RTOS的第二个原因是提高开发效率,缩短开发周期。一个复杂的应用程序,可以分解成多个任务。每个任务模块的调试、修改几乎不影响其它模块。商业软件一般都提供了良好的多任务调试环境。应用系统中看起来好像是计算机在同时做好几件事。人们往往只注意到32位MCU比8位、16位MCU快这一特点,而忽略了其另一重要特征。32位CPU本来是为运行多用户、多任务操作系统,如UNIX,而设计的。以MOTOROLA 683XX系列嵌入式应用MCU为例,其CPU 32是与68020 CPU兼容的,特别适于运行多任务实时系统。一些独具匠心的设计使其更容易做到不死机。例如,将CPU系统态和用户态分开,一些要害指令只能在系统态下运行。将系统堆栈和用户堆栈分开,以及实时地给出CPU运行的状态,如CPU是在读程序还是在读写数据,在系统态还是用户态,允许用户在系统设计中从硬件和软件两方面对实时内核的运行予以保护。如果仍以通常线性程序的方式使用这类MCU,32位CPU最突出的优势就没有发挥出来。从某种意义上说,没有操作系统的计算机(裸机)是没有用的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。五、 使用实时内核的优缺点嵌入式实时操作系统RTOS其实就是指嵌入的实时内核。它的使用使得实时应用程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大为减化。所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的系统服务,RTOS使得资源得到更好的利用。如果应用项目使用的嵌入式计算机对额外的需求可以承受,应该考虑使用实时内核。这些额外的需求是:额外的ROM/RAM开销;2~5个百分点的CPU额外负荷以及内核的价格。还没有提到的一个因素是使用实时内核增加的价格成本。在一些应用中,价格就是一切,以至于对使用RTOS连想都不敢想。当今有80个以上的RTOS商家,生产面向8位、16位、32位甚至是64位CPU的RTOS产品。一些软件包是完整的操作系统,不仅包括实时内核,还包括输入输出管理、视窗系统(用于显示)、文件系统、网络、语言接口库、调试软件、交叉编译平台(cross\ platform compilers)。RTOS的价格从70美元到30000美元。RTOS制造商还可能索取每个目标系统的版权使用费。就像从RTOS商家那里买一个芯片安装到每一个产品上,然后一同出售。RTOS商家称之为硅片软件。每个产品的版权费从5美元到250美元不等。同如今的其它软件包一样,还得考虑软件维护费,这部分开销为每年100到5000美元!由于经费不足,一些小的科研单位和大专院校,无力购买商业RTOS软件包用于科研和教学;而Internet网上有大量的RTOS源码资源可以利用。搜索Embedded “与”RTOS关键字,可以得到两万个以上这方面的入口节点。有源码的最著名的操作系统软件就是Linux,这是一个免费的类似Unix的操作系统。至少在700万台计算机上成功地使用着。美国的一些大学在网上推出了实时的Linux,进而推出一些可嵌入的RTOS。另一个著名的嵌入式RTOS的免费源码是μCOS和μCOS\ II。它可用于16位、32位机,也可用于8位机。我们在以68HC08、68HC11的CPU为核心的系统中就成功地使用了μCOS。我们也实现了μCOS在MOTOROLA的32位 CPU,如M68K、CPU32、M.Core上的运行。尽管这些资源带有源码,但理解、消化并用在某应用系统上也是一项艰苦的工作,特别是在没有调试手段的情况下,这一过程就更加漫长艰苦。用于开发产品就显得力不从心,开发周期也变得相当长。然而笔者仍旧鼓励在这一领域工作的爱好者、研究生采用μCOS之类网上免费资源。主要目的在于培养对计算机有深层次理解的高级人才。虽然RTOS有免费的,而调试工具则没有免费的。因而免费的RTOS在使用上受到了很大的限制,而有能力使用这类源码的人员也极为有限。故对于面向产品开发的用户,购买商用软件不失为一种好的手段。六、 我国计算机嵌入式应用开发的特点首先,资金短缺是一个共同的问题。国家底子薄,公司规模过小或科研经费少,只是问题的一方面。从文化的角度分析,一个项目从头到尾都要自己搞,即所谓小而全,是国人的传统。可能是多年来小农经济的影响,接受和适应大市场的思维方式总有一个过程。从思维方式上分析,我国的科技人员更习惯于自下而上的思维方式。习惯于设计硬件、写汇编语言程序,如果问题解决了,高级语言也就免了;而西方人更提倡自上而下的设计方法:先设计系统,再分任务;先用高级语言,不得已时再写汇编。因此,国人有必要借鉴和学习自上而下思维方式的先进一面,与我们习惯的自下而上的思维结合一下。RTOS的应用也将是思维方式的革新。在使用8位还是32位MCU方面,国人更习惯于说,我的系统小,8位机足够好了;而发达国家的科技人员更喜欢说,有功能那么强的MCU,又如此的便宜,为什么不用呢?如果我们只有看到了国外进口的某同类产品上使用了32位MCU才大吃一惊准备升级自己的产品,则我们与国外的差距不可能缩小。正是由于有了得心应手的开发工具,且32位MCU并不比8位MCU贵多少,32位MCU才得以在发达国家得到广泛应用。长期以来,开发嵌入式应用的工程师们一般只是某应用领域的专家,他们对计算机的理解尚不能与计算机专家相比。他们心目中的计算机只是用CPU、存储器、I/O三部分组成的,并没有把操作系统看成计算机必不可少的一部分。他们往往习惯于硬件调通,写个程序,系统工作了,开发工作也就完成了的模式,而不知道他们的程序中存在着相当多隐患;而计算机专家们往往缺乏各应用对象知识,不太有能力深入到某具体应用的深层次。这就形成了计算机专家与嵌入式应用工程师之间的一道缝隙。这个缝隙在8位单片机(MCU)中不甚明显,而在16位、32位MCU系统中则十分明显。RTOS的使用与推广,实际上是在填补这道缝隙。它教会应用工程师如何利用计算机科学数十年发展而来的精美成果,使自己的产品更可靠、更上档次、开发周期更短。从队伍方面分析,我国做嵌入式应用开发的科技人员,绝大多数只是其所在应用领域的专家,是从学习8位单片机开始认识计算机的。这些人对该应用领域有丰富的经验,但对计算机本身缺乏深层次的理解。尤其在嵌入式应用开始大量使用32位CPU时,不仅思维方式上不能适应,计算机方面的理论知识也显得不够。今后在相当长的一段时间内,国内的计算机嵌入式应用主要还是靠这些非计算机专业的技术人员来推动。教给这样一支队伍如何使用最先进的工具和应用计算机专业人士多年研究的成果,是提高我国计算机应用水平的捷径。(待续)
标签:
来源:单片机与嵌入式系统应用 作者:清华MOTOROLA单片机应用开发研究中心 邵贝贝 许庆丰 王若鹏 时间:2006/2/12 0:00:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐