ucosii任务管理及调度ppt课件.ppt
《ucosii任务管理及调度ppt课件.ppt》由会员分享,可在线阅读,更多相关《ucosii任务管理及调度ppt课件.ppt(170页珍藏版)》请在三一办公上搜索。
1、实时操作系统C/OS-II,1,3,2,4,C/OS-II概述,任务管理,中断和时间管理,任务之间的通信与同步,5,存储管理,通用操作系统和嵌入式(实时)操作系统,通用操作系统:Windows/NT/XP、Linux、UNIX等,用于PC机、服务器,嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等;嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)
2、、尺寸(可裁剪性 )、可扩展性(内核、中间件);,嵌入式操作系统的发展,常见的嵌入式操作系统,实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵,如Vxworks、QNX、WinCE、Palm OS等。免费型的实时操作系统在价格方面具有优势,目前主要有Linux,C/OS是一种源码开放的商业RTOS;,C/OS是商业操作系统,学习嵌入式操作系统,学习一种实时操作系统RTOS,如uc/OS,掌握实时系统的概念和设计方法;嵌入式系统以应用为中心,应用时选择“适用”的操作系统;嵌入式Linux;自己“写”RTO
3、S一种学习态度;,C/OS-II的层次示意图,基于C/OS-II的嵌入式系统软件层次示意图如右图所示,RTOS在嵌入式系统中的位置,嵌入式硬件平台,BSP,KERNEL,FS,TCP/IP,设备驱动,设备I/O,调试工具,其它组件,应用,RTOS,C/C+,C/OS简介,1、C/OSMicro Controller O S,微控制器操作系统2、 C/OS简介美国人Jean Labrosse 1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等 1998年C/OS-II,目前的版本C/OS -II V2.61,2.722000年,得到美国航
4、空管理局(FAA)的认证,可以用于飞行器中网站www.ucos-II.com(),公开源代码可移植性(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可以嵌入到读者的产品中成为产品的一部
5、分。可裁剪(Scalable) 可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。,C/OS的性能特点(一),占先式(Preemptive)多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有256个任务可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈 每个任务有自己单独的栈, C/OS-II允许每个任务有不同的
6、栈空间,以便压低应用程序对RAM的需求。系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性,C/OS的性能特点(二),C/OS-II图书,描述了C/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版,Chinese,Korean,English,ISBN 1-57820-103-9美国CMP BOOK,ISBN 7-8107
7、7-290-2北京航空航天大学出版社,ISBN 89-951540-5-5,C/OS-II的各种商业应用,全世界有数百种产品在应用:AvionicsMedicalCell phonesRouters and switchesHigh-end audio equipmentWashing machines and dryersUPS (Uninterruptible Power Supplies)Industrial controllersGPS Navigation SystemsMicrowave RadiosInstrumentationPoint-of-sale terminals更多,
8、C/OS-II提供的系统服务,信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱消息队列内存管理时钟管理任务管理,C/GUI and C/FS,C/GUI嵌入式的用户界面用ANSI C书写支持任何8, 16, 32-bits CPU彩色,灰、度,等级或黑白显示代码尺寸小C/FS嵌入式的文件系统Written in ANSI C用ANSI C书写支持任何8, 16, 32-bits CPU支持SMC, MMC, SD, CF, IDE, Flash, RAM其他介质,可移植的数据类型,typedef unsigned char BOOLEAN;typedef unsigned char
9、 INT8U;typedef signed char INT8S;typedef unsigned int INT16U;typedef signed int INT16S;typedef unsigned long INT32U;typedef signed long INT32S;typedef float FP32;typedef double FP64;,C/OS-II的文件结构,1,3,2,4,C/OS-II概述,任务和任务管理,中断和时间管理,任务之间的通信与同步,5,存储管理,任务的实现,创建任务的系统服务OSTaskCreate()INT8U OSTaskCreate (voi
10、d (*task)(void *pd), /任务代码指针 void *pdata, /任务参数指针OS_STK *ptos, /任务栈的栈顶指针 INT8U prio /任务的优先级);OSTaskCreateExt(),提问:C/OS-II中的任务是进程还是线程?,任务主函数,一个任务通常是一个无限循环(返回值类型void)void MyTask(void *pdata) while (1) do something; waiting; do something; ,Why?,任务也可以自我删除(并非真的删除,只是内核不再知道该任务)void MyTask (void *pdata) . /
11、* 用户代码 */ OSTaskDel(OS_PRIO_SELF);,C/OS-可以管理多达64个任务;每个任务被赋以不同的优先级,取值从0到OS_LOWEST_PRIO-2,数值越小,优先级越高;系统保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用,用户可以有56个应用任务;任务的优先级同样也是它的标识号ID。,OS_CFG.H中定义63,空闲任务和统计任务,内核总是创建一个空闲任务OSTaskIdle();总是设置为最低优先级,OS_LOWEST_PRIO
12、R;当所有其他任务都未在执行时,空闲任务开始执行;应用程序不能删除该任务;空闲任务的工作就是把32位计数器OSIdleCtr加1,该计数器被统计任务所使用;统计任务OSTaskStat(),提供运行时间统计。每秒钟运行一次,计算当前的CPU利用率。其优先级是OS_LOWEST_PRIOR-1,可选。,任务控制块TCB,任务控制块 OS_TCB是描述一个任务的核心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优先级,任务链表指针等;一旦任务建立了,任务控制块OS_TCB将被赋值。,任务控制块TCB,typedef struct os_tcb 栈指针; INT16U OSTCBI
13、d; /*任务的ID*/ 链表指针; OS_EVENT *OSTCBEventPtr; /*事件指针*/ void *OSTCBMsg; /*消息指针*/ INT8U OSTCBStat; /*任务的状态*/ INT8U OSTCBPrio; /*任务的优先级*/ 其他 OS_TCB;,栈指针,OSTCBStkPtr:指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可以是任意的;OSTCBStkBottom:指向任务栈底的指针;OSTCBStkSize:栈的容量,用可容纳的指针数目而不是字节数(Byte)来表示。,链表指针,所有的任务控制块分属于两条不同的链表,单向的空闲链表(头指针为
14、OSTCBFreeList)和双向的使用链表(头指针为OSTCBList);OSTCBNext、OSTCBPrev:用于将任务控制块插入到空闲链表或使用链表中。每个任务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员都能快速插入或删除。,空闲TCB链表,所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中,系统初始化时,所有TCB被链接成空闲的单向链表,头指针为OSTCBFreeList。当创建一个任务后,就把OSTCBFreeList所指向的TCB赋给了该任务,并将它加入到使用链表中,然后把OSTCBFreeList指向空闲
15、链表中的下一个结点。,系统初始化后,指针数组,指向相应TCB,任务的状态休眠,休眠状态(Dormant):任务存在于内存空间中,但内核不可见;可以通过以下函数通知内核,使之变为就绪状态:OSTaskCreate()或OSTaskCreateExt()可以通过以下函数返回到休眠状态:OSTaskDel(),任务的状态就绪,就绪状态(Ready):万事具备,只欠CPU;在所有的就绪任务当中,具有最高优先级的任务被选中去运行;如果任务在运行的时候被抢占了CPU(任务被中断时才可能被抢占),则又回到就绪状态。,任务的状态运行,运行状态(Running):任务在CPU上运行;当一个任务在运行时,如果没有
16、关闭中断,则有可能被中断所打断;当一个任务在运行时,可能因为各种原因进入阻塞状态。OSMBoxPend(),OSQPend(),OSSemPend() OSTaskSuspend(), OSTimeDly(),任务的状态ISR,中断服务状态(ISR):该任务原来在CPU上运行,后来被中断所打断,由中断服务程序ISR接管了CPU;当中断服务程序运行完毕后,内核要判断是否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果没有,则原有的任务重新运行。,任务的状态阻塞,阻塞/等待状态(Waiting):任务由于正在等待某个事件(信号量、邮箱或队列)而被挂起;当任务等待的事件发生时,回到就绪
17、状态。OSMBoxpost(), OSQPost(), OSSemPost(), OSTaskResume(), OSTimeDlyResume()或OSTimeTick(),状态的转换,删除任务,任务就绪表及其操作管理,多个任务的就绪态优先顺序是靠任务就绪表管理的,就是用存放任务准备就绪标志的列表管理。对其操作设置算法的设计,要求能保证每次任务的调度切换时间的可确定性、一致性和高速性。为了做到这点,C/OS设计者采用一种特殊的算法方式。整个操作设置算法由两个变量( OSRdyGrp, OSRdyTbl8 ),两个表格( OSMapTblIndex , INT8U const OSUnMapT
18、bl ),三个程序组成。三个程序分别用于任务登记进入就绪态、任务脱离就绪态、找出最高优先级就绪态任务三种就绪表操作。,任务就绪表及其操作管理,每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量OSRdyGrp、OSRdyTbl。每个任务就绪标志置于OSRdyTbl相应位中。在登记进入就绪态对OSRdyGrp的操作,是为了在第三种操作时提供有效的信息。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl中的相应元素的相应位也置位。,任务就绪表,优先级最低任务,(空闲任务),优先
19、级最高任务,任务优先级号,对于整数OSRdyTbli(0i7),若它的某一位为1,则OSRdyGrp的第i位为1。任务的优先级由X和Y确定,任务调度器,C/OS-II任务就绪表,根据优先级确定就绪表(1),假设优先级为12的任务进入就绪状态,12=1100b,则OSRdyTbl1的第4位置1,且OSRdyGrp的第1位置1,相应的数学表达式为: OSRdyGrp |=0 x02; OSRdyTbl1 |=0 x10;而优先级为21的任务就绪21=10 101b,则OSRdyTbl2的第5位置1,且OSRdyGrp的第2位置1,相应的数学表达式为: OSRdyGrp |=0 x04; OSRdy
20、Tbl2 |=0 x20;,根据优先级确定就绪表(2),从上面的计算可知:若OSRdyGrp及OSRdyBbl的第n位置1,则应该把OSRdyGrp及OSRdyBbl的值与2n 相或。uC/OS中,把2n的n=0-7的8个值先计算好存在数组OSMapTbl7中,也就是: OSMapTbl0 = 20 = 0 x01(0000 0001) OSMapTbl1 = 21 = 0 x02(0000 0010) OSMapTbl7 = 27 = 0 x80(1000 0000),掩码映射表,使任务进入就绪态,如果prio是任务的优先级,即任务的标识号,则将任务放入就绪表,即使任务进入就绪态的方法(程序
21、)是:OSRdyGrp |= OSMapTblprio3;OSRdyTblprio3 |= OSMapTblprio,使任务脱离就绪态,将任务就绪表OSRdyTblprio3相应元素的相应位清零,而且当OSRdyTblprio3中的所有位都为零时,即该任务所在组的所有任务中没有一个进入就绪态时,OSRdyGrp的相应位才为零。任务脱离就绪态的方法(程序)是:if(OSRdyTblprio3 ,根据就绪表确定最高优先级,两个关键:将优先级数分解为高三位和低三位分别确定;高优先级有着小的优先级号;,根据就绪表确定最高优先级,通过OSRdyGrp值确定高3位,假设OSRdyGrp0 x08=0 x0
22、0001000,第3位为1,优先级的高3位为011;通过OSRdyTbl3的值来确定低3位,假设OSRdyTbl30 x3a,第1位为1,优先级的低3位为001,3*8+1=25,任务优先级,源代码中使用了查表法,查表法具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的Y = OSUnMapTblOSRdyGrp;X = OSUnMapTblOSRdyTblY;Prio = (Y3) + X;,参见OS_CORE.C,INT8U const OSUnMapTbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4,
23、 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2,
24、 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3,
25、 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0;,优先级判定表OSUnMapTbl256,举例: 如OSRdyGrp的值为01101000B,即0X68,则查得OSUnMapTblOSRdyGrp的值是3,它相应于OSRdyGrp中的第3位置1; 如OSRdyTbl3的值是11100100B,即0XE4,则查OSUnMapTblOSRdyTbl3的值是2,则进入就绪态的最高任务优先级 Prio=3*8+2=26
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ucosii 任务 管理 调度 ppt 课件
链接地址:https://www.31ppt.com/p-1438421.html