《嵌入式实时操作系统分析.ppt》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统分析.ppt(44页珍藏版)》请在三一办公上搜索。
1、嵌入式系统设计与实例开发ARM与C/OS-实时操作系统分析控制工程系火控教研室,嵌入式系统,什么是嵌入式系统 以应用为中心,以计算机技术为基础,软、硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统本身是个外延极广的名词,凡是与产品结合在一起的具有嵌入式特点的控制系统都可以叫嵌入式系统。,从硬件方面来讲,嵌入式系统的核心部件是嵌入式处理器。嵌入式微控制器(MCU)嵌入式DSP处理器(DSP)嵌入式微处理器(MPU)嵌入式片上系统(SOC),嵌入式系统的分类,1、嵌入式系统的硬件,嵌入式微处理器(MPU):是由计算机中的CPU演变而来的。它的特征是具有
2、32位以上的处理器,具有较高的性能。但与计算机处理器不同的是,在实际嵌入式应用中,它只保留与嵌入式应用紧密相关的功能硬件,去处其他的冗余功能部分,这样就以最低的功耗和资源实现了嵌入式应用的特殊要求,具有体积小、重量轻、成本低、可靠性高的优点。嵌入式处理器目前主要有ARM系列、MIPS、Power PC、x86等。,嵌入式系统的分类,2、嵌入式系统软件:由嵌入式操作系统和相应的各种应用程序构成。,操作系统:是连接计算机硬件和应用程序的系统程序,具有两个功能:使计算机硬件便于使用,高效组织和正确地使用计算机的资源。,无操作系统-有操作系统区别,?,无操作系统,CPU,Task,Interface,
3、有操作系统,Interface,Task0,Task1,CPU,无操作系统:1严格按所规定的顺序执行2程序执行的封闭性3独占资源,执行过程和结果不受其它程序的影响4 程序结果的可再现性(结果的确定性)5只要初始状态相同,程序多次重复运行,其结果与程序执行速度无关(连续或间断),结果都应相同。有操作系统:多任务系统可以充分的利用系统资源。,嵌入式操作系统,嵌入式操作系统 微型化 可裁减性好 适时性 可靠性 易移植性 实时操作系统 分时操作系统,嵌入式操作系统Embedded Operating System,Linux,WinCE,VxWorks,OSE,Nucleus,uC/OS-II,eCo
4、s,uTTRON,常见的嵌入式操作系统,实时嵌入式操作系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵,如VxWorks、QNX、WinCE、Palm OS等。免费型的实时操作系统在价格方面具有优势,目前主要有Linux和C/OS,稳定性与服务性存在挑战。,C/OS-是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。抢占式
5、内核。UClinux则是继承标准Linux的优良特性,针对嵌入式处理器的特点设计的一种操作系统,具有内嵌网络协议、支持多种文件系统,开发者可利用标准Linux先验知识等优势。其编译后目标文件可控制在几百KB量级。无MMU,采用时间片轮番调度算法。,免费且公开源码的:C/OS-和UClinux,C/OS简介,1.C/OSMicro Controller O S,微控制器操作系统2.C/OS简介美国人Jean Labrosse 于1992年完成;应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等;1998年C/OS-II,目前的版本C/OS-II V2.
6、61,2.72;2000年,得到美国航空管理局(FAA)的认证,可用于飞行器中;网站()。,公开源代码可移植性(Portable)绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得 C/OS-II便于移植到其他微处理器上。C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。可固化(ROMable)C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化),C/OS-II可以嵌入到读者的产品中成为产品的一部
7、分。可裁剪(Scalable)可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。,C/OS的性能特点(一),占先式(Preemptive)多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务。可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈 每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空
8、间,以便压低应用程序对RAM的需求。系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性,C/OS的性能特点(二),C/GUI and C/FS,C/GUI嵌入式的用户界面;用ANSI C书写;支持任何8,16,32-bits CPU;彩色,灰度,等级或黑白显示;代码尺寸小。C/FS嵌入式的文件系统Written in ANSI C;用ANSI C书写;支持任何8,16
9、,32-bits CPU;支持SMC,MMC,SD,CF,IDE,Flash,RAM其他介质。,C/OS-II图书,描述了C/OS-II内部的工作原理;随书的CD中包含了源代码;工业界最清晰的源代码除英文版外,有中文和韩文版。,Chinese,Korean,English,ISBN 1-57820-103-9美国CMP BOOK,ISBN 7-81077-290-2北京航空航天大学出版社,ISBN 89-951540-5-5,C/OS-II的各种商业应用,全世界有数百种产品在应用:AvionicsMedicalCell phonesRouters and switchesHigh-end au
10、dio equipmentWashing machines and dryersUPS(Uninterruptible Power Supplies)Industrial controllersGPS Navigation SystemsMicrowave RadiosInstrumentationPoint-of-sale terminals更多,内容提要,1,3,2,4,实时操作系统基本概念,C/OS-内核结构,C/OS-移植,移植实例分析,特点:可靠性实时性可裁减性,要求:多任务抢占式调度任务的通讯与同步任务与中断之间的通讯,RTOS,RTOS在嵌入式系统中的位置,嵌入式硬件平台,BSP
11、,KERNEL,FS,TCP/IP,设备驱动,设备I/O,调试工具,其他组件,应用,RTOS,C/C+,实时系统基本概念,前后台系统(Foreground/Background System),应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可以看成前台行为(foreground)。,时间相关性很强的关键操作(Critical operation)一定是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台程序走到该处理这个信息这一步时才能得到处理,这种系统在处理信息的及时性上,比实际可以做到的要差
12、。,实时系统基本概念,多任务,多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行很像前后台系统,但后台任务有多个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。,实时系统基本概念,任务,实时系统基本概念,任务切换(Context Switch or Task Switch)Context Switch 在有的书中翻译成上下文切换,实际含义是任务切换,或CPU寄存器内容切换。当多任务内核
13、决定运行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU寄存器中的全部内容。这些内容保存在任务的当前状况保存区(Tasks Context Storage area),也就是任务自己的栈区之中。入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行。这个过程叫做任务切换。,实时系统基本概念,静态优先级应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。动态优先级应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。,任务优先级 每个任务
14、都有其优先级。任务越重要,赋予的优先级应越高。,实时系统基本概念,内核(Kernel)多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。,实时系统基本概念,不可剥夺型内核(Non-Preemptive Kernel),不可剥夺型内核要求每个任务自我放弃CPU的所有权。各个任务彼此合作共享一个CPU。异步事件还是由中断服
15、务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。,实时系统基本概念,可剥夺型内核(非占先式内核),高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。,中断是一种硬件机制,用于通知CPU有个异步
16、事件发生了。中断一旦被识别,CPU保存部分(或全部)现场(Context)即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后,程序回到:1在前后台系统中,程序回到后台程序 2对不可剥夺型内核而言,程序回到被中断了的任务 3对可剥夺型内核而言,让进入就绪态的优先级最高的任务开始运行 中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询(Polling)是否有事件发生。通过两条特殊指令:关中断(Disable interrupt)和开中断(Enable interrupt)可以让微处理器不响应或响应中断。,实时系统基本
17、概念,代码的临界段 代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。,实时系统基本概念,在实时环境中,关中断的时间应尽量的短。关中断影响中断延迟时间(见2.26中断延迟)。关中断时间太长可能会引起中断丢失。微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断,并服务于那个更重要的中断,如图2.19所示。,实时系统基本概念,中断响应中断响应定义为从中断发生到开始执行用户的中断服务子程序代码来处理这个中断的时间。中断响应时间包括开始处
18、理这个中断前的全部开销。对前后台系统,保存寄存器以后立即执行用户代码 中断响应时间=中断延迟+保存CPU内部寄存器的时间,实时系统基本概念,不可剥夺型内核,微处理器保存内部寄存器以后,用户的中断服务子程序代码全立即得到执行。中断响应时间=中断延迟+保存CPU内部寄存器的时间 可剥夺型内核,则要先调用一个特定的函数,该函数通知内核即将进行中断服务,使得内核可以跟踪中断的嵌套。对于 C/OS-说来,这个函数是OSIntEnter(),中断响应 中断延迟+保存CPU内部寄存器的时间+内核的进入中断服务函数的执行时间,中断恢复时间(Interrupt Recovery),中断恢复时间定义为微处理器返回
19、到被中断了的程序代码所需要的时间。前后台系统和不可剥夺型内核,中断恢复时间很简单,只包括恢复CPU内部寄存器值的时间和执行中断返回指令的时间。中断恢复时间=恢复CPU内部寄存器值的时间+执行中断返回指令的时间,实时系统基本概念,可剥夺型内核,中断的恢复要复杂一些。典型地,在中断服务子程序的末尾,要调用一个由实时内核提供的函数。在C/OS-中,这个函数叫做OSIntExit(),这个函数用于辨定中断是否脱离了所有的中断嵌套。如果脱离了嵌套(即已经可以返回到被中断了的任务级时),内核要辨定,由于中断服务子程序ISR的执行,是否使得一个优先级更高的任务进入了就绪态。如果是,则要让这个优先级更高的任务
20、开始运行。在这种情况下,被中断了的任务只有重新成为优先级最高的任务而进入就绪态时才能继续运行。中断恢复时间=判定是否有优先级更高的任务进入了就绪态的时间+恢复那个优先级更高任务的CPU内部寄存器的时间+执行中断返回指令的时间,实时系统基本概念,图 中断延迟、响应和恢复(可剥夺型内核),实时系统基本概念,时钟节拍(Clock Tick),实时系统基本概念,时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在10mS到200mS之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。时钟节拍率
21、越快,系统的额外开销就越大。,对存储器的需求,实时系统基本概念,如果设计是前后台系统,对存储器容量的需求仅仅取决于应用程序代码。而使用多任务内核时的情况则很不一样。内核本身需要额外的代码空间(ROM)。,总代码量=应用程序代码+内核代码,因为每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM)。,如果内核不支持单独的中断用栈RAM总需求=应用程序的RAM需求+(任务栈需求+最大中断嵌套栈需求)*任务数 如果内核支持中断用栈分离 RAM总需求=应用程序的RAM需求+内核数据区的RAM需求+各任务栈需求之总和+最多中断嵌套之栈需求,互斥条件,实现任务间通讯最简便到办法是使用共享数据结构
22、。特别是当所有到任务都在一个单一地址空间下,能使用全程变量、指针、缓冲区、链表、循环缓冲区等,使用共享数据结构通讯就更为容易。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互斥条件最一般的方法有:1关中断 2使用测试并置位指令 3禁止做任务切换 4利用信号量,实时系统基本概念,死锁(或抱死)(Deadlock(or Deadly Embrace)),实时系统基本概念,死锁也称作抱死,指两个任务无限期地互相等待对方控制着的资源。设任务T1正独享资源R1,任务T2在独享资源T2,而此时T1又要独享R2,T2
23、也要独享R1,于是哪个任务都没法继续执行了,发生了死锁。最简单的防止发生死锁的方法是让每个任务都:1先得到全部需要的资源再做下一步的工作 2用同样的顺序去申请多个资源 3释放资源时使用相反的顺序,可以利用信号量使某任务与中断服务同步(或者是与另一个任务同步,这两个任务间没有数据交换)。如图2.13所示。注意,图中用一面旗帜,或称作一个标志表示信号量。这个标志表示某一事件的发生(不再是一把用来保证互斥条件的钥匙)。用来实现同步机制的信号量初始化成0,信号量用于这种类型同步的称作单向同步(unilateral rendezvous)。一个任务做I/O操作,然后等信号回应。当I/O操作完成,中断服务
24、程序(或另外一个任务)发出信号,该任务得到信号后继续往下执行。,同步,实时系统基本概念,图2.13 用信号量使任务与中断服务同步,实时系统基本概念,任务间的通讯(Intertask Communication),有时很需要任务间的或中断服务与任务间的通讯。这种信息传递称为任务间的通讯。任务间信息的传递有两个途径:通过全程变量或发消息给另一个任务。用全程变量时,必须保证每个任务或中断服务程序独享该变量。中断服务中保证独享的唯一办法是关中断。如果两个任务共享某变量,各任务实现独享该变量的办法可以是关中断再开中断,或使用信号量(如前面提到的那样)。,实时系统基本概念,事件标志(Event Flags)当某任务要与多个事件同步时,要使用事件标志。若任务需要与任何事件之一发生同步,可称为独立型同步(即逻辑或关系)。任务也可以与若干事件都发生了同步,称之为关联型(逻辑与关系)。,实时系统基本概念,