原创 基于51单片机的实时操作系统的研究(一)

2010-6-15 11:03 2526 8 8 分类: MCU/ 嵌入式

基于51单片机的实时操作系统的研究(一)


51操作系统 2009-04-17 14:36:45 阅读301 评论1 字号:




嵌入操作系统的发展现状


在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活等方方面面中。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术越来越和人们的生活紧密结合。


   C语言的出现使操作系统开发变得简单。从上世纪80年代开始,出现了各种各样的商用嵌入式操作系统百家争鸣的局面,比较著名的有VxWorks、pSOS和Windows CE等等,这些操作系统大部分是为专有系统而开发的。另外,源代码开放的嵌入式Linux,由于其强大的网络功能和低成本,近来也得到了越来越多的应用。


   随着信息家电的普及,智能化、网络化将会无所不在,所有这些都离不开嵌入式软件,而在嵌入式软件只中最核心的莫过于RTOS(Real Time Operating System,实时操作系统)。我们都非常熟悉Windows这样的操作系统,但却不一定熟悉嵌入式系统中常用的RTOS。如今,微软已经推出了Windows的嵌入式版本——Windows CE。而风靡一时的Linux也在嵌入式系统中扮演着重要角色。这样看来,传统桌面操作系统和嵌入式操作系统的界线似乎也在淡化.


用于嵌入式环境的操作系统RTOS与桌面操作系统有很多本质的不同。这些不同的特性导致产品开发的不同结果


实时多任务操作系统(RTOS)简介


目前嵌入式应用领域的一个发展倾向是采用实时多任务操作系统(Real Time Operation System即RTOS)。RTOS的应用是和前面所述的应用复杂化直接相关的。过去一个单片机应用程序所控制的外设和履行的任务不多,采取一个主循环和几个顺序调用的子程序模块 即可满足要求。目前单片机芯片本身的性能大幅度提高,可以适应应用复杂化这一要求,问题在于软件上。随着应用的复杂化,一个嵌入式控制器系统可能要同时控制/监视很多外设,要求有实时响应,有很多处理任务,各个任务之间有多种信息传递,如果仍采用原来 的程序设计方法存在两个问题。一是中断可能得不到及时响应,处理时间过长,这对于一些控制场合是不允许的,对于网络通信方面则会降低系统整体的信息流量。二是系统任务多,要考虑的各种可能也多,各种资源如调度不当就会发生死锁,降低软件可靠性,程序编写的任务量成指数增加。实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等) 管理、消息管理、任务调度、异常处理等工作。在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。 工程师在编写程序时,可以分别编写各个任务,不必同时将所有任务运行的各种可能情况 记在心中,大大减小了程序编写的工作量,而且减小了出错的可能,保证最终程序具有高可靠性。


 实时多任务操作系统,以分时方式运行的多个任务,看上去好像是多个任务“同时”运行。任务之间的切换应当以优先级为根据,只有优先服务方式的RTOS才是真正的实时操作系统,时间分片方式和协作方式的RTOS并不是真正的“实时”。许多公司的RTOS 采用全优先服务方式的任务调度,可以使中断潜伏时间减到最小。其RTOS的主要功能模 块有调度和中断处理,任务管理,事件管理,定时器管理,管理,循环队列管理,资源管理,固定存储块管理,规范的UART管理,自动掉电管理。这些也是标准的RTOS所应具有的基本功能。RTOS也体现了一种新的系统设计思想和一个开放的软件框架,工程师可以在不大量变动系统其它任务的情况下增加或去掉一个任务;一个项目开发的过程中,可以有多个工程师同时进行系统的软件开发,各个人之间只要制订好规程和协议即可,既缩短了开发时间, 又降低了最终软件产品对于具体某个开发者个人的依赖性。为RTOS设计的成熟和通用的任务可以以库函数的形式供其它人继续利用,和C语言的设计思想一致。


嵌入式系统通常包括构成软件的基本运行环境的硬件和操作系统两部分。嵌入式系统的运行环境和应用场合决定了嵌入式系统具有区别于其它操作系统的一些特点。


  (1)嵌入式处理器


嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)。嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPC、Motorola 68000、ARM系列等等。


嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAM、ROM或两者都有)和其它外设封装在同一片集成电路里。常见的有8051。


    嵌入式DSP专门用来对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT、谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。


(2)微内核结构


大多数操作系统至少被划分为内核层和应用层两个层次。内核只提供基本的功能,如建立和管理进程、提供文件系统、管理设备等,这些功能以系统调用方式提供给用户。一些桌面操作系统,如Windows、Linux等,将许多功能引入内核,操作系统的内核变得越来越大。内核变大使得占用的资源增多,剪裁起来很麻烦。


    大多数嵌入式操作系统采用了微内核结构,内核只提供基本的功能,比如:任务的调度、任务之间的通信与同步、内存管理、时钟管理等。其它的应用组件,比如网络功能、文件系统、GUI系统等均工作在用户态,以系统进程或函数调用的方式工作。因而系统都是可裁减的,用户可以根据自己的需要选用相应的组件。


   (3)任务调度


    在嵌入式系统中,任务即线程。大多数的嵌入式操作系统支持多任务。多任务运行的实现实际是靠CPU在多个任务之间切换、调度。每个任务都有其优先级,不同的任务优先级可能相同也可能不同。任务的调度有三种方式:可抢占式调度、不可抢占式调度和时间片轮转调度。不可抢占式调度是指,一个任务一旦获得CPU就独占CPU运行,除非由于某种原因,它决定放弃CPU的使用权;可抢占式调度是基于任务优先级的,当前正在运行的任务可以随时让位给优先级更高的处于就绪态的其它任务;当两个或两个以上任务有同样的优先级,不同任务轮转地使用CPU,直到系统分配的CPU时间片用完,这就是时间片轮转调度。


   目前,大多数嵌入式操作系统对不同优先级的任务采用基于优先级的抢占式调度法,对相同优先级的任务则采用时间片轮转调度法。


  (4)硬实时和软实时


   有些嵌入式系统对时间的要求较高,称之为实时系统。有两种类型的实时系统:硬实时系统和软实时系统。软实时系统并不要求限定某一任务必须在一定的时间内完成,只要求各任务运行得越快越好;硬实时系统对系统响应时间有严格要求,一旦系统响应时间不能满足,就可能会引起系统崩溃或致命的错误,一般在工业控制中应用较多。


  (5)内存管理


   针对有内存管理单元(MMU)的处理器设计的一些桌面操作系统,如Windows、Linux,使用了虚拟存储器的概念。虚拟内存地址被送到MMU。在这里,虚拟地址被映射为物理地址,实际存储器被分割为相同大小的页面,采用分页的方式载入进程。一个程序在运行之前,没有必要全部装入内存,而是仅将那些当前要运行的部分页面装入内存运行。


   大多数嵌入式系统针对没有MMU的处理器设计,不能使用处理器的虚拟内存管理技术,采用的是实存储器管理策略。因而对于内存的访问是直接的,它对地址的访问不需要经过MMU,而是直接送到地址线上输出,所有程序中访问的地址都是实际的物理地址;而且,大多数嵌入式操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为它分配足够的连续地址空间,然后全部载入主存储器的连续空间。


    由此可见,嵌入式系统的开发人员不得不参与系统的内存管理。从编译内核开始,开发人员必须告诉系统这块开发板到底拥有多少内存;在开发应用程序时,必须考虑内存的分配情况并关注应用程序需要运行空间的大小。另外,由于采用实存储器管理策略,用户程序同内核以及其它用户程序在一个地址空间,程序开发时要保证不侵犯其它程序的地址空间,以使得程序不至于破坏系统的正常工作,或导致其它程序的运行异常;因而,嵌入式系统的开发人员对软件中的一些内存操作要格外小心。


   (6)内核加载方式


    嵌入式操作系统内核可以在Flash上直接运行,也可以加载到内存中运行。Flash的运行方式,是把内核的可执行映像烧写到Flash上,系统启动时从Flash的某个地址开始执行。这种方法实际上是很多嵌入式系统所采用的方法。内核加载方式是把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行。这种方式相对复杂一些,但是运行速度可能更快,因为RAM的存取速率要比Flash高。


    由于嵌入式系统的内存管理机制,嵌入式操作系统对用户程序采用静态链接的形式。在嵌入式系统中,应用程序和操作系统内核代码编译、链接生成一个二进制影像文件来运行。


嵌入操作系统的特点


嵌入式系统给人的第一印象就是占用空间小。所以,普通的Linux或者Windows操作系统要变成嵌入式操作系统,首先就是要进行裁剪。然而,与桌面环境相比,嵌入式环境对于操作系统系统要求不仅仅是“小”,二者在设计要求上有着本质的不同。这些不同主要体现在可裁剪性、实时性和可靠性等三个方面。


 可裁剪性:  从硬件环境来看,桌面操作系统具有标准化的CPU、存储和I/O架构,而嵌入式环境中的RTOS的硬件环境只有标准化的CPU,没有标准化的存储、I/O和显示器架构。


 从应用环境来看,桌面操作系统面向复杂多变的应用,而RTOS面向单一设备的单一应用。


 从开发界面来看,桌面操作系统试图给开发人员提供一个“黑箱”,让开发人员通过一系列标准的系统调用来使用操作系统中的功能,而嵌入式试图为开发人员提供一个“白箱”,让开发人员可以自主控制系统的所有资源。


 应用于嵌入式环境的RTOS,在研发的时候就必须立足于改变自身、开放自身,让开发人员可以根据硬件环境和应用环境的不同而对操作系统进行灵活的裁剪和配置,因为对于任何一个具体的嵌入式设备,它的功能是确定的,因此只要从原有操作系统中把这个特定应用所需的功能拿进来即可。


应当指出的是:如果一个操作系统平台只能依靠手工的方式去掉一些代码,这根本就不是可裁剪性。所谓可裁剪性是在软件工程阶段利用软件配置方法实现软件构件的“即插即用”。


可裁剪性带给用户的一个最直接的好处是硬件成本降低,这对于成本敏感的应用,如消费电子类设备,具有重要的现实意义。由于设备中只包含应用程序用到的那部分操作系统功能,这就使得系统变得简单、易把握,从而提高系统的可靠性。


实时性:所谓实时性,其核心含义在于确定性,而不是单纯的速度快。也就是说,RTOS所要求的是在规定的时间内做完应该做的事情,并且操作系统的行为(执行线索)是确定的,这是写出高可靠性程序的基础。 因为嵌入式系统主要是对仪器设备的动作进行监测控制的,而一般的桌面操作系统基本上是根据人在键盘和鼠标发出的命令进行工作。相对而言,仪器设备的动作具有严格的、机械的时序要求,而人的动作和反应在时序上并不那么严格。比如,用于控制火箭发动机的嵌入式系统,它所发出的指令不仅要速度快,而且多个发动机之间的时序要求非常严格,否则就会差之毫厘、谬之千里。在这样的应用环境中,非实时的普通操作系统无论如何是无法适应的。


可靠性:  桌面操作系统与RTOS相比,另一个差别就是对于稳定性、可靠性方面的设计思路。桌面操作系统比较庞大、复杂,而RTOS比较小巧、简捷。  运行于嵌入式环境中的RTOS要求应用软件具有与操作系统同样的可靠性,这种设计思路对应用开发人员提出了更高的要求,同时也要求操作系统自身足够开放。


著名的“木桶原理”告诉我们,局部的不足会导致整体的缺陷。要保证系统的可靠性,必须保证系统中每一个部分都是可靠的,任何部分的不可靠都会导致系统整体的不可靠。RTOS对软件开发人员来说是完全开放的,是一个白箱,允许开发人员非常清楚地了解和掌握操作系统内部情况,对存储器中的每一位和每一个I/O接口进行操作控制,从而可以设计出高效稳定的应用软件。


相对于Windows环境下的应用程序开发,嵌入式系统下的程序开发有着很多的不同。不同的硬件平台和操作系统带来了许多附加的开发复杂性。


 


http://xky19870905.blog.163.com/blog/#m=0

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条