嵌入式实时操作系统分析详解ppt课件.ppt

上传人:飞****2 文档编号:31440654 上传时间:2022-08-07 格式:PPT 页数:228 大小:2.17MB
返回 下载 相关 举报
嵌入式实时操作系统分析详解ppt课件.ppt_第1页
第1页 / 共228页
嵌入式实时操作系统分析详解ppt课件.ppt_第2页
第2页 / 共228页
点击查看更多>>
资源描述

《嵌入式实时操作系统分析详解ppt课件.ppt》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统分析详解ppt课件.ppt(228页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1ARMARM原理及应用原理及应用第五讲第五讲 实时操作系统实时操作系统 C/OS-C/OS-分析分析2实时操作系统实时操作系统C/OS-II C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理3通用操作系统和嵌入式(实时)操作系统通用操作系统和嵌入式(实时)操作系统l通用操作系统:通用操作系统:Windows/NT/XP、Linux、UNIX等,用于等,用于PC机机、服务器,、服务器,l嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本特点,又

2、具有系统实时性、硬件的相关依赖性用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;、软件固态化以及应用的专用性等特点;l嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等;等;l嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可裁剪性任务切换时间等)、尺寸(可裁剪性 )、可扩展性

3、(内核、中间)、可扩展性(内核、中间件);件);4嵌入式操作系统嵌入式操作系统特点:特点:l可装卸性。开放性、可伸缩性的体系结构。可装卸性。开放性、可伸缩性的体系结构。l强实时性。强实时性。EOS实时性一般较强,可用于各种设备控制当中。实时性一般较强,可用于各种设备控制当中。l统一的接口。提供各种设备驱动接口。统一的接口。提供各种设备驱动接口。l操作方便、简单、提供友好的图形操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。,图形界面,追求易学易用。l提供强大的网络功能,支持提供强大的网络功能,支持TCP/IP协议及其它协议,提供协议及其它协议,提供TCP/UDP/IP/PPP协议

4、支持及统一的协议支持及统一的MAC访问层接口,为各种移动计算访问层接口,为各种移动计算设备预留接口。设备预留接口。l强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的预,这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。服务。l固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入固化代码。在嵌入式系统中,嵌入式操作系

5、统和应用软件被固化在嵌入式系统计算机的式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。文件系统。l更好的硬件适应性,也就是良好的移植性。更好的硬件适应性,也就是良好的移植性。5嵌入式操作系统的发展嵌入式操作系统的发展操作系统内核操作系统内核应用程序应用程序驱动程序和固件驱动程序和固件操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序操作系统内核操作系统内核

6、文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序通信协议通信协议库函数库函数80年代初期年代初期80年代中期年代中期-90年代中年代中期期90年代末期年代末期-21世纪世纪6常见的嵌入式操作系统常见的嵌入式操作系统 实时嵌入式操作系统的种类繁多,大体上可分为两实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。种,商用型和免费型。l商用型的实操作系统功能稳定、可靠,有完善的技商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵术支持和售后服务,但往往价格昂贵, ,如如VxworksVxworks、QNXQNX、WinCEWinCE、

7、Palm OSPalm OS等。等。l免费型的实时操作系统在价格方面具有优势,目前免费型的实时操作系统在价格方面具有优势,目前主要有主要有Linux,C/OSLinux,C/OS是一种源码开放的商业是一种源码开放的商业RTOSRTOS;C/OS是商业操作是商业操作系统系统7RTOSRTOS在嵌入式系统中的位置在嵌入式系统中的位置嵌入式硬件平台BSPKERNELFSTCP/IP设备驱动设备驱动设备设备I/O调试工具调试工具其它组件其它组件应用RTOSC/C+8 C/OSC/OS简介简介1 1、 C/OSC/OSMicro Controller O SMicro Controller O S,微控

8、制器操作系统,微控制器操作系统2 2、 C/OSC/OS简介简介l美国人美国人Jean Labrosse 1992Jean Labrosse 1992年完成年完成l应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等机控制、高速公路电话系统、自动提款机等 l19981998年年 C/OSC/OS-II-II,目前的版本,目前的版本 C/OSC/OS -II V2.61 -II V2.61,2.722.72l20002000年,得到美国航空管理局(年,得到美国航空管理局(FAAFAA)的认证,可以用

9、于飞行器)的认证,可以用于飞行器中中l网站网站www.ucos-II.comwww.ucos-II.com()9u公开源代码公开源代码u可移植性(可移植性(PortablePortable) 绝大部分绝大部分 C/OS-II C/OS-II的源码是用移植性很强的的源码是用移植性很强的ANSI CANSI C写的。和微处理器写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得低限度,使得 C/OS-II C/OS-II便于移植到其他微处理器上。便于移植到其他微处理器上。 C/OS-II C/OS-II

10、可以在可以在绝大多数绝大多数8 8位、位、1616位、位、3232位以至位以至6464位微处理器、微控制器位微处理器、微控制器 、数字信号处、数字信号处理器(理器(DSPDSP)上运行。)上运行。u可固化(可固化(ROMableROMable) C/OS-II C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(段(C C编译、连接、下载和固化),编译、连接、下载和固化), C/OS-II C/OS-II可以嵌入到读者的产品可以嵌入到读者的产品中成为产品的一部分。中成为产品的一部分。u可裁剪(可裁剪(ScalableScal

11、able) 可以只使用可以只使用 C/OS-II C/OS-II中应用程序需要的那些系统服务。也就是说某产中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个品可以只使用很少几个 C/OS-II C/OS-II调用,而另一个产品则使用了几乎所调用,而另一个产品则使用了几乎所有有 C/OS-II C/OS-II的功能,这样可以减少产品中的的功能,这样可以减少产品中的 C/OS-II C/OS-II所需的存储器空所需的存储器空间(间(RAMRAM和和ROMROM)。这种可剪裁性是靠条件编译实现的。)。这种可剪裁性是靠条件编译实现的。 C/OSC/OS的性能特点(一)的性能特点(一)10u

12、占先式(占先式(PreemptivePreemptive)u多任务多任务 C/OS-IIC/OS-II可以管理可以管理6464个任务,然而,目前这一版本保留个任务,然而,目前这一版本保留8 8个给系统。应用程序最个给系统。应用程序最多可以有多可以有256256个任务个任务u可确定性可确定性 全部全部 C/OS-II C/OS-II的函数调用与服务的执行时间具有可确定性。的函数调用与服务的执行时间具有可确定性。u任务栈任务栈 每个任务有自己单独的栈,每个任务有自己单独的栈, C/OS-II C/OS-II允许每个任务有不同的栈空间,以便压低应允许每个任务有不同的栈空间,以便压低应用程序对用程序对

13、RAMRAM的需求。的需求。u系统服务系统服务 C/OS-IIC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。的申请与释放、时间相关函数等。u中断管理中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255255层。层。u稳定性与可靠性稳定性与可靠性 C/OS

14、C/OS的性能特点(二)的性能特点(二)11 C/OS-IIC/OS-II图书图书l描述了描述了 C/OS-IIC/OS-II内部的工作原理内部的工作原理l随书的随书的CDCD中包含了源代码中包含了源代码n工业界最清晰的源代码工业界最清晰的源代码l除英文版外,有中文和韩文版除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-512 C/OS-IIC/OS-II的各种商业应用的各种商业应用l全世界有数百种产品在应用全世界有数百种产品在

15、应用: :lAvionicslMedicallCell phoneslRouters and switcheslHigh-end audio equipmentlWashing machines and dryerslUPS (Uninterruptible Power Supplies)lIndustrial controllerslGPS Navigation SystemslMicrowave RadioslInstrumentationlPoint-of-sale terminalsl更多更多13 C/OS-IIC/OS-II提供的系统服务提供的系统服务l信号量信号量l带互斥机制的信号

16、量带互斥机制的信号量n减少优先级倒置的问题减少优先级倒置的问题l事件标志事件标志l消息信箱消息信箱l消息队列消息队列l内存管理内存管理l时钟管理时钟管理l任务管理任务管理14 C/GUI and C/FSl C/GUIC/GUIl嵌入式的用户界面嵌入式的用户界面l用用ANSI CANSI C书写书写l支持任何支持任何8, 16, 32-bits CPU8, 16, 32-bits CPUl彩色,灰、度,等级或黑白显示彩色,灰、度,等级或黑白显示l代码尺寸小代码尺寸小l C/FSC/FSl嵌入式的文件系统嵌入式的文件系统Written in ANSI CWritten in ANSI Cl用用A

17、NSI CANSI C书写书写l支持任何支持任何8, 16, 32-bits CPU8, 16, 32-bits CPUl支持支持SMC, MMC, SD, CF, IDE, Flash, RAMSMC, MMC, SD, CF, IDE, Flash, RAM其他介质其他介质15 C/OSC/OS-II-II的文件结构的文件结构16多道程序技术多道程序技术为了提高计算机系统中各种资源的利用率,为了提高计算机系统中各种资源的利用率,现代操作系统广泛采用多道程序技术(现代操作系统广泛采用多道程序技术(multi-programming),使多个程序同时在系统中存),使多个程序同时在系统中存在并运

18、行。在并运行。17CPUI/O单道程序:单道程序:多道程序:多道程序:CPUI/O作业甲(作业甲(红红黄黄)作业乙(作业乙(蓝蓝绿绿)1819进程、线程和任务进程、线程和任务在多道程序系统中,各个程序之间是并发执在多道程序系统中,各个程序之间是并发执行的,共享系统资源。行的,共享系统资源。CPU需要在各个运行需要在各个运行的程序之间来回地切换,这样的话,要想描的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了为此,操作系统设计者提出了进程进程的概念。的概念。20什么是进程?什么是进程?A process

19、a program in execution 一个进程应该包括:一个进程应该包括: 程序的代码;程序的代码; 程序的数据;程序的数据; PC中的值,用来指示下一条将运行的指令;中的值,用来指示下一条将运行的指令; 一组通用的寄存器的当前值,堆、栈;一组通用的寄存器的当前值,堆、栈; 一组系统资源(如打开的文件)一组系统资源(如打开的文件) 总之,进程包含了正在运行的一个程序的所有总之,进程包含了正在运行的一个程序的所有状态信息。状态信息。21main( ).A( ).PROCESS A program is C statements or commands静态的;静态的; A process

20、is program + running context动态的动态的.main( ).A( ).PROGRAMheap StackA MainRegisters,PCProcess Program 22进程的特性进程的特性动态性:动态性:程序的运行状态在变,程序的运行状态在变,PC、寄存器、寄存器、 堆和栈等;堆和栈等;独立性:独立性:是一个独立的实体,是计算机系统资是一个独立的实体,是计算机系统资 源的使用单位。每个进程都有源的使用单位。每个进程都有“自己自己” 的的PC和内部状态,运行时独立于其他和内部状态,运行时独立于其他 的进程(逻辑的进程(逻辑PC和物理和物理PC););并发性:并发

21、性:从宏观上看各进程是同时独立运行的从宏观上看各进程是同时独立运行的23四个进程在并发地运行四个进程在并发地运行(本图摘自(本图摘自Andrew S. Tanenbaum: “Modern Operating Systems”)24什么是线程?什么是线程?自从自从60年代提出进程概念以来,在操作系统中年代提出进程概念以来,在操作系统中一直都是以进程作为独立运行的基本单位,直一直都是以进程作为独立运行的基本单位,直到到80年代中期,人们又提出了更小的能独立运年代中期,人们又提出了更小的能独立运行的基本单位行的基本单位 线程。线程。25WhyWhy线程?线程?【案例】编写一个【案例】编写一个MP3

22、播放软件。核心功能播放软件。核心功能模块有三个:(模块有三个:(1)从)从MP3音频文件当中读取音频文件当中读取数据;(数据;(2)对数据进行解压缩;()对数据进行解压缩;(3)把解)把解压缩后的音频数据播放出来。压缩后的音频数据播放出来。26单进程的实现方法单进程的实现方法 main( ) while(TRUE) Read( ); Decompress( ); Play( ); Read( ) Decompress( ) Play( ) 问题:问题: 播放出来的声音能播放出来的声音能 否连贯?否连贯? 各个函数之间不是各个函数之间不是 并发执行,影响资并发执行,影响资 源的使用效率;源的使用

23、效率;I/OCPU27多进程的实现方法多进程的实现方法 程序程序1main( ) while(TRUE) Read( ); Read( ) 问题:进程之间如何通信,共享数据?问题:进程之间如何通信,共享数据?程序程序3main( ) while(TRUE) Play( ); Play( ) 程序程序2main( ) while(TRUE) Decompress( ); Decompress( ) 28怎么办?怎么办? 需要提出一种新的实体,满足以下特性:需要提出一种新的实体,满足以下特性:(1)实体之间可以并发地执行;)实体之间可以并发地执行;(2)实体之间共享相同的地址空间;)实体之间共享相

24、同的地址空间;这种实体就是:这种实体就是:线程线程(Thread)29什么是线程?什么是线程? Thread: A sequential execution stream within a process; A thread of execution; 进程当中的一条执行流程。进程当中的一条执行流程。30从两个方面来理解进程:从两个方面来理解进程: 从资源组合的角度:进程把一组相关的从资源组合的角度:进程把一组相关的 资源组合起来,构成了一个资源平台资源组合起来,构成了一个资源平台 (环境),包括地址空间(代码段、数据(环境),包括地址空间(代码段、数据 段)、打开的文件等各种资源;段)、打开

25、的文件等各种资源; 从运行的角度:代码在这个资源平台上的从运行的角度:代码在这个资源平台上的 一条执行流程(线程)。一条执行流程(线程)。资源平台资源平台 线程线程 31进程进程 线程线程 资源平台资源平台优点:优点: 一个进程中可以同时存在多个线程;一个进程中可以同时存在多个线程; 各个线程之间可以并发地执行;各个线程之间可以并发地执行; 各个线程之间可以共享地址空间。各个线程之间可以共享地址空间。32线程所需的资源线程所需的资源(本图摘自(本图摘自Silberschatz, Galvin and Gagne: “Operating System Concepts”) 33 C/OS-II概

26、述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理34什么是任务?什么是任务? 在许多嵌入式操作系统当中,一般把在许多嵌入式操作系统当中,一般把能够独立运行的实体称为能够独立运行的实体称为“任务任务”(Task),那么这里所说的任务到底),那么这里所说的任务到底是进程还是线程呢?是进程还是线程呢?35任务的实现任务的实现在多道程序(多任务)的嵌入式操作系统在多道程序(多任务)的嵌入式操作系统中,任务之间的结构为层状结构,存在着中,任务之间的结构为层状结构,存在着父子关系;父子关系;当嵌入式内核刚刚启动时,只有一个任务当嵌入式内核刚刚启动时

27、,只有一个任务存在,然后由该任务派生出所有其他的任存在,然后由该任务派生出所有其他的任务。务。36任务的层次结构任务的层次结构OS初始任务初始任务 任务任务 任务任务 任务任务 任务任务 任务任务 任务任务 任务任务 37任务的创建任务的创建在嵌入式操作系统当中,任务的创建主要在嵌入式操作系统当中,任务的创建主要有两种模型:有两种模型:fork/exec和和spawn;fork/exec:符合:符合IEEE/ISO POSIX 1003.1标准,先用标准,先用fork系统调用创建与父任务完系统调用创建与父任务完全相同的一份内存空间,然后再用全相同的一份内存空间,然后再用exec系系统调用来移除

28、父任务的内容,并调入子任统调用来移除父任务的内容,并调入子任务的程序代码。优点:允许继承;务的程序代码。优点:允许继承;spawn:直接为子任务创建一个全新的地:直接为子任务创建一个全新的地址空间,并装入其程序代码。址空间,并装入其程序代码。38任务的描述任务的描述问题:如果让你来设计问题:如果让你来设计OS当中的任务当中的任务机制,那么你将如何来描述一个任务?机制,那么你将如何来描述一个任务? 描述任务的数据结构:描述任务的数据结构:任务控制块任务控制块(Task Control Block,TCB)。)。系统为每个任务都维护了一个系统为每个任务都维护了一个TCB,用来保存与,用来保存与该任

29、务有关的所有信息。该任务有关的所有信息。39任务控制块的内容任务控制块的内容任务任务ID、任务的状态、任务的优先级;、任务的状态、任务的优先级;CPU上下文信息:通用寄存器的值、上下文信息:通用寄存器的值、PC寄存器的值、程序状态字、栈指针的值;寄存器的值、程序状态字、栈指针的值;如果在该如果在该OS中,任务描述的是进程,则中,任务描述的是进程,则还应包括其他的一些内容,如段表地址、还应包括其他的一些内容,如段表地址、页表地址等存储管理方面的信息;根目录页表地址等存储管理方面的信息;根目录、文件描述字等文件管理方面的信息。、文件描述字等文件管理方面的信息。40任务的创建:为该任务生成一个任务的

30、创建:为该任务生成一个TCB;任务的终止:回收它的任务的终止:回收它的TCB;任务的组织管理:通过对任务的组织管理:通过对TCB的组织管理来实现。的组织管理来实现。系统用系统用TCB来描述任务的基本情况以及运行来描述任务的基本情况以及运行变化的过程,变化的过程,TCB是任务存在的唯一标志。是任务存在的唯一标志。41任务的实现任务的实现创建任务的系统服务创建任务的系统服务lOSTaskCreate()INT8U OSTaskCreate (void (*task)(void *pd), /任务代码指针任务代码指针 void *pdata, /任务参数指针任务参数指针OS_STK *ptos, /

31、任务栈的栈顶指针任务栈的栈顶指针 INT8U prio /任务的优先级任务的优先级);lOSTaskCreateExt()提问:提问: C/OS-II中的任务是进程还是线程?中的任务是进程还是线程?42任务主函数任务主函数一个任务通常是一个无限循环(返回值类型一个任务通常是一个无限循环(返回值类型voidvoid)void MyTask(void *pdata) while (1) do something; waiting; do something; Why?43任务也可以自我删除(并非真的删除,只是内核不任务也可以自我删除(并非真的删除,只是内核不再知道该任务)再知道该任务)void M

32、yTask (void *pdata) . /* 用户代码用户代码 */ OSTaskDel(OS_PRIO_SELF);44lC/OS-C/OS-可以管理多达可以管理多达6464个任务;个任务;l每个任务被赋以不同的优先级,取值从每个任务被赋以不同的优先级,取值从0 0到到OS_LOWEST_PRIO-2OS_LOWEST_PRIO-2,数值越小,优先级越高;,数值越小,优先级越高;l系统保留了优先级为系统保留了优先级为0 0、1 1、2 2、3 3、OS_LOWEST_PRIO-3OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2OS_LOWEST_PRI0-2,OS_LO

33、WEST_PRI0-1OS_LOWEST_PRI0-1以及以及OS_LOWEST_PRI0OS_LOWEST_PRI0这这8 8个任个任务以被将来使用,用户可以有务以被将来使用,用户可以有5656个应用任务;个应用任务;l任务的优先级同样也是它的标识号任务的优先级同样也是它的标识号IDID。OS_CFG.H中定义中定义6345空闲任务和统计任务空闲任务和统计任务l内核总是创建一个内核总是创建一个空闲任务空闲任务OSTaskIdle()OSTaskIdle();w总是设置为最低优先级,总是设置为最低优先级,OS_LOWEST_PRIOROS_LOWEST_PRIOR;w当所有其他任务都未在执行时

34、,空闲任务开始当所有其他任务都未在执行时,空闲任务开始执行;执行;w应用程序不能删除该任务;应用程序不能删除该任务;w空闲任务的工作就是把空闲任务的工作就是把3232位计数器位计数器OSIdleCtrOSIdleCtr加加1 1,该计数器被统计任务所使用;,该计数器被统计任务所使用;l统计任务统计任务OSTaskStat()OSTaskStat(),提供运行时间统计。每,提供运行时间统计。每秒钟运行一次,计算当前的秒钟运行一次,计算当前的CPUCPU利用率。其优先级利用率。其优先级是是OS_LOWEST_PRIOR-1OS_LOWEST_PRIOR-1,可选。,可选。46任务控制块任务控制块T

35、CBTCBl任务控制块任务控制块 OS_TCBOS_TCB是描述一个任务的核是描述一个任务的核心数据结构,存放了它的各种管理信息心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优,包括任务堆栈指针,任务的状态、优先级,任务链表指针等;先级,任务链表指针等;l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OS_TCBOS_TCB将将被赋值。被赋值。47任务控制块任务控制块TCBTCBtypedef struct os_tcb 栈指针;栈指针; INT16U OSTCBId; /*任务的任务的ID*/ 链表指针;链表指针; OS_EVENT *OSTCBEventPtr;

36、/*事件指针事件指针*/ void *OSTCBMsg; /*消息指针消息指针*/ INT8U OSTCBStat; /*任务的状态任务的状态*/ INT8U OSTCBPrio; /*任务的优先级任务的优先级*/ 其他其他 OS_TCB;48任务的状态休眠任务的状态休眠l休眠状态休眠状态(Dormant):任务存在于内存:任务存在于内存空间中,但内核不可见;空间中,但内核不可见;l可以通过以下函数通知内核,使之变为就可以通过以下函数通知内核,使之变为就绪状态:绪状态:OSTaskCreate()或或OSTaskCreateExt()l可以通过以下函数返回到休眠状态:可以通过以下函数返回到休眠

37、状态:OSTaskDel() 49任务的状态就绪任务的状态就绪l就绪状态就绪状态(Ready):万事具备,只欠:万事具备,只欠CPU;l在所有的就绪任务当中,具有最高优先级在所有的就绪任务当中,具有最高优先级的任务被选中去运行;的任务被选中去运行;l如果任务在运行的时候被抢占了如果任务在运行的时候被抢占了CPU,则,则又回到就绪状态。又回到就绪状态。50任务的状态运行任务的状态运行l运行状态运行状态(Running):任务在:任务在CPU上运上运行;行;l当一个任务在运行时,如果没有关闭中断,当一个任务在运行时,如果没有关闭中断,则有可能被中断所打断;则有可能被中断所打断;l当一个任务在运行时

38、,可能因为各种原因进当一个任务在运行时,可能因为各种原因进入阻塞状态。入阻塞状态。OSMBoxPend(),OSQPend(),OSSemPend() OSTaskSuspend(), OSTimeDly()51任务的状态任务的状态ISRISRl中断服务状态中断服务状态(ISR):该任务原来在:该任务原来在CPU上运行,后来被中断所打断,由中断服务程上运行,后来被中断所打断,由中断服务程序序ISR接管了接管了CPU;l当中断服务程序运行完毕后,内核要判断是当中断服务程序运行完毕后,内核要判断是否有新的、更高优先级的任务就绪,如果有否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果

39、没有,则原有,则原有的任务被抢占;如果没有,则原有的任务重新运行。的任务重新运行。52任务的状态阻塞任务的状态阻塞l阻塞阻塞/等待状态等待状态(Waiting):任务由于正在:任务由于正在等待某个事件(信号量、邮箱或队列)而被等待某个事件(信号量、邮箱或队列)而被挂起;挂起;l当任务等待的事件发生时,回到就绪状态。当任务等待的事件发生时,回到就绪状态。OSMBoxpost(), OSQPost(), OSSemPost(), OSTaskResume(), OSTimeDlyResume()或或OSTimeTick()53状态的转换状态的转换删除任务删除任务 54任务就绪表任务就绪表l每个任务

40、的就绪态标志放入在就绪表中,每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量就绪表中有两个变量OSRdyGrpOSRdyGrp和和OSRdyTblOSRdyTbl。 l在在OSRdyGrpOSRdyGrp中,任务按优先级分组,中,任务按优先级分组,8 8个任个任务为一组。务为一组。OSRdyGrpOSRdyGrp中的每一位表示中的每一位表示8 8组任组任务中每一组中是否有进入就绪态的任务。务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表任务进入就绪态时,就绪表OSRdyTblOSRdyTbl中中的相应元素的相应位也置位。的相应元素的相应位也置位。55任务就绪表任务就绪表OSR

41、dyGrp OSRdyGrp 1207 6 5 4 300X XX XX XY YY Y Y Y任务优先级任务优先级 20176543108915 14 13 12 1118161723 22 21 20 1926242531 30 29 28 2734323339 38 37 36 3542404147 46 45 44 4350484955 54 53 52 5158565763 62 61 60 5901234567OSRdyTbl8OSRdyTbl8X XY Y优先级最低任务优先级最低任务 (空闲任务)(空闲任务) 优先级最高任务优先级最高任务 任务优先级号任务优先级号 对于整数对于整

42、数OSRdyTbli(0 i 7),若它的某一位),若它的某一位为为1,则,则OSRdyGrp的第的第i位为位为1。任务的优先级由任务的优先级由X和和Y确定确定56根据优先级确定就绪表根据优先级确定就绪表(1)(1)n假 设 优 先 级 为假 设 优 先 级 为 1 21 2 的 任 务 进 入 就 绪 状 态 ,的 任 务 进 入 就 绪 状 态 ,12=1100b,12=1100b,则则OSRdyTbl1OSRdyTbl1的第的第4 4位置位置1 1,且,且OSRdyGrpOSRdyGrp的第的第1 1位置位置1 1,相应的数学表达式为,相应的数学表达式为: : OSRdyGrp |=0

43、x02OSRdyGrp |=0 x02; OSRdyTbl1 |=0 x10;OSRdyTbl1 |=0 x10;n而优先级为而优先级为2121的任务就绪的任务就绪21=10 101b21=10 101b,则,则OSRdyTbl2OSRdyTbl2的第的第5 5位置位置1 1,且,且OSRdyGrpOSRdyGrp的第的第2 2位位置置1,1,相应的数学表达式为:相应的数学表达式为: OSRdyGrp |=0 x04OSRdyGrp |=0 x04; OSRdyTbl2 |=0 x20;OSRdyTbl2 |=0 x20;57根据优先级确定就绪表根据优先级确定就绪表(2)(2)n从上面的计算可

44、知从上面的计算可知: :若若OSRdyGrpOSRdyGrp及及OSRdyBblOSRdyBbl的第的第n n位置位置1 1,则应该把,则应该把OSRdyGrpOSRdyGrp及及OSRdyBblOSRdyBbl的值与的值与2 2n n 相或。相或。uC/OSuC/OS中,把中,把2 2n n的的n=0-7n=0-7的的8 8个个值先计算好存在数组值先计算好存在数组OSMapTbl7OSMapTbl7中中, ,也就是:也就是: OSMapTbl0 = 2OSMapTbl0 = 20 0 = 0 x01= 0 x01(0000 00010000 0001) OSMapTbl1 = 2OSMapT

45、bl1 = 21 1 = 0 x02= 0 x02(0000 00100000 0010) OSMapTbl7 = 2 OSMapTbl7 = 27 7 = 0 x80= 0 x80(1000 00001000 0000)58使任务进入就绪态使任务进入就绪态n如果如果prioprio是任务的优先级,即任务的标识号,则将是任务的优先级,即任务的标识号,则将任务放入就绪表,即使任务进入就绪态的方法是:任务放入就绪表,即使任务进入就绪态的方法是:OSRdyGrp |= OSMapTblprio3;OSRdyGrp |= OSMapTblprio3;OSRdyTblprio3 |= OSMapTblp

46、rio&0 x07;OSRdyTblprio3 |= OSMapTblprio&0 x07;n假设优先级为假设优先级为12121100b1100bOSRdyGrp |= OSMapTbl123(0 x02)OSRdyGrp |= OSMapTbl123(0 x02);OSRdyTbl1 |=0 x10;OSRdyTbl1 |=0 x10;59使任务使任务脱离脱离就绪态就绪态n将任务就绪表将任务就绪表OSRdyTblprio3OSRdyTblprio3相应元素的相应相应元素的相应位清零,而且当位清零,而且当OSRdyTblprio3OSRdyTblprio3中的所有位都中的所有位都为零时,即该任

47、务所在组的所有任务中没有一个为零时,即该任务所在组的所有任务中没有一个进入就绪态时,进入就绪态时,OSRdyGrpOSRdyGrp的相应位才为零。的相应位才为零。if(OSRdyTblprio3 &= OSMapTblprio&0 x07) = 0) OSRdyGrp &= OSMapTblprio3;60任务的调度任务的调度l C/OSC/OS是可抢占实时多任务内核,它总是运行是可抢占实时多任务内核,它总是运行就绪任务中优先级最高的那一个。就绪任务中优先级最高的那一个。l C/OSC/OS中不支持时间片轮转法,每个任务的优中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调

48、度的先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。并进行上下文切换。l C/OSC/OS任务调度所花的时间为常数,与应用程任务调度所花的时间为常数,与应用程序中建立的任务数无关。序中建立的任务数无关。61l确定哪个任务的优先级最高,应该选择哪个任确定哪个任务的优先级最高,应该选择哪个任务去运行,这部分的工作是由调度器(务去运行,这部分的工作是由调度器(SchedulerScheduler)来完成的。)来完成的。 w任务级的调度是由函数任务级的调度是由函数OSSched()OSSched()完成的;完成的

49、;w中断级的调度是由另一个函数中断级的调度是由另一个函数OSIntExt()OSIntExt()完完成的。成的。62根据就绪表确定最高优先级根据就绪表确定最高优先级两个关键两个关键: :l将优先级数分解为高三位和低三位分别确将优先级数分解为高三位和低三位分别确定;定;l高优先级有着小的优先级号;高优先级有着小的优先级号;63根据就绪表确定最高优先级根据就绪表确定最高优先级l通过通过OSRdyGrpOSRdyGrp值确定高值确定高3 3位,假设位,假设OSRdyGrpOSRdyGrp0 x08=0 x08=0 x000010000 x00001000,第,第3 3位为位为1 1,优先级的高,优先级的高3 3位为位为011011; ;l通过通过OSRdyTbl3OSRdyTbl3的值来确定低的值来确定低3 3位,假设位,假设OSRdyTbl3OSRdyTbl30 x3a0 x3a,第,第1 1位为位为1 1,优先级的低,优先级的低3 3位为位为001001,3 3* *8+1=8+1=252500011001任务优先级任务优先级64任务调度器任务调度器void OSSched (void) INT8U y; OS_ENTER_CRITICAL(); if (OSLockNesting | OSIntNesting) = 0) y = OSUnMapTblOSRdyGrp; OSPri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁