uCOS嵌入式开发.ppt
《uCOS嵌入式开发.ppt》由会员分享,可在线阅读,更多相关《uCOS嵌入式开发.ppt(50页珍藏版)》请在三一办公上搜索。
1、1,What is uC/OS?,u:Micro C:controluC/OS:适合于小的、控制器的操作系统小巧公开源代码,详细的注解可剥夺实时内核可移植性强多任务 确定性,2,The Story of uC/OS,美国人Jean Labrosse 1992年编写的商业软件的昂贵应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等,COS不但提供了一个完整的嵌入式实时内核的源代码,而且对这些代码的细节作了详尽的解释,它不仅告诉读者这个实时内核是怎么写的,还解释了为什么要这样写。而商业上的实时操作系统软件不但价格昂贵(一般都在5千到2万美元的价位上),而
2、且其中很多都是所谓黑盒子,即不提供源代码。l 源代码的绝大部分是用C语言写的,经过简单的编译,读者就能在PC机上运行,边读书、边实践。由于用汇编语言写的部分只有200行左右,该实时内核可以方便地移植到几乎所有的嵌入式应用类CPU上。移植范例的源代码可以从因特网上下载。l 从最老版本的实时内核COS,以及后来的C/OS,到新版本的C/OS-II,已经有多年的历史。许多行业上都有成功应用该实时源代码.实时内核移植.内核实时内核的实例,这些应用的实践是该内核实用性、无误性的最好证据。,3,4,5,概要,内核结构-任务以及调度机制任务间通信uC/OS的移植在PC机上运行uC/OS,6,任务task,典
3、型的一个无限循环。void mytask(void*pdata)for(;)do something;waiting;do something;支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小系统占用了两个任务,空闲任务和统计任务。,任务优先级,每个任务按其重要性被赋予一定的优先级。C/OS-可以管理多达64个任务,但目前版本的C/OS-有两个任务已经被系统占用了。作者保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用。OS_LOWEST_PRI0
4、是作为定义的常数在OS_CFG.H文件中用定义常数语句#define constant定义的。因此用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级,优先级可以从0到OS_LOWEST_PR10-2。优先级号越低,任务的优先级越高。C/OS-总是运行进入就绪态的优先级最高的任务。目前版本的C/OS-中,任务的优先级号就是任务编号(ID)。优先级号(或任务的ID号)也被一些内核服务函数调用,如改变优先级函数OSTaskChangePrio(),以及任务删除函数OSTaskDel()。,7,任务状态,休眠态(dormant):指任务驻留在程序空间中,还没有交给内核管理。把任务交给内核是通
5、过调用OSTaskCreate()或OSTaskCreatExt()实现的。就绪(Ready):当任务一旦建立,这个任务就处于就绪态准备运行。任务可以动态的被另一个程序建立,也可以在系统运行开始之前建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。通过调用OSTaskDel()使任务返回到休眠态。就绪态的任务都放在就绪列表中。在任务调度时,指针OSTCBHighRdy指向优先级最高的就绪任务,也就是立刻就要运行的任务。,8,运行(Running):准备就绪的最高优先级的任务获得CPU的控制权,从而处于运行态。指针OST
6、CBCur指向正在运行的任务。等待或挂起(Pending):正在运行的任务由于调用延时函数OSTimeDly()或等待事件信号量的来临而将自身挂起,因而处于等待或挂起态。因为等待某事件而被挂起的任务注册在该事件的等待列表中。中断态(Interrupt):正在运行的任务可以被中断,除非是该任务将中断关闭。被中断的任务进入中断服务程序(ISR)。如果中断服务程序使一个更高优先级的任务准备就绪,则中断服务程序结束后,更高优先级的任务开始运行程序。,9,10,任务堆栈,在C/OS-中,每个任务都有自己的堆栈空间。为方便使用,在C/OS-中专门定义了一个OS_STK类型的数据,这样在应用程序中定义任务的
7、堆栈就非常方便。例如:程序 85#define TASK_STK_SIZE 200OS_STK TaskStartStkTASK_STK_SIZE;,11,12,任务的数据结构任务控制块,任务控制块 OS_tcb,包括 任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。所有的任务控制块分为两条链表,空闲链表和使用链表。,13,任务控制块结构,Struct os_tcb OS_STK*OSTCBStkPtr;struct os_tcb*OSTCBNext;struct os_tcb*OSTCBprev;OS_EVENT*OSTCBEventPtr;void*OSTCBMsg;INT16U
8、OSTCBDly;INT8U OSTCBStat;INT8U OSTCBPrio;INT8U OSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY;OS_TCB,OSTCBStkPtr是指向当前任务栈顶的指针。C/OS-允许每个任务有自己的栈,尤为重要的是,每个任务的栈的容量可以是任意的。有些商业内核要求所有任务栈的容量都一样,除非用户写一个复杂的接口函数来改变之。这种限制浪费了RAM,当各任务需要的栈空间不同时,也得按任务中预期栈容量需求最多的来分配栈空间。OSTCBStkPtr是OS_TCB数据结构中唯一的一个能用汇编语言来处置的变量(在任务切换段的代码Context-swi
9、tching code之中),把OSTCBStkPtr放在数据结构的最前面,使得从汇编语言中处理这个变量时较为容易。,14,.OSTCBNext和.OSTCBPrev用于任务控制块OS_TCBs的双重链接,该链表在时钟节拍函数OSTimeTick()中使用,用于刷新各个任务的任务延迟变量.OSTCBDly,每个任务的任务控制块OS_TCB在任务建立的时候被链接到链表中,在任务删除的时候从链表中被删除。双重连接的链表使得任一成员都能被快速插入或删除。,15,OSTCBEventPtr是指向事件控制块的指针,后面的章节中会有所描述(见8.9 任务的同步和通信)。.OSTCBMsg是指向传给任务的消
10、息的指针。用法将在后面的章节中提到(见8.9 任务的同步和通信)。.OSTCBDly当需要把任务延时若干时钟节拍时要用到这个变量,或者需要把任务挂起一段时间以等待某事件的发生,这种等待是有超时限制的。在这种情况下,这个变量保存的是任务允许等待事件发生的最多时钟节拍数。如果这个变量为0,表示任务不延时,或者表示等待事件发生的时间没有限制,16,OSTCBStat是任务的状态字。当.OSTCBStat为0,任务进入就绪态。可以给.OSTCBStat赋其它的值,在文件uCOS_II.H中有关于这个值的描述。.OSTCBPrio是任务优先级。高优先级任务的.OSTCBPrio值小。也就是说,这个值越小
11、,任务的优先级越高。.OSTCBX,.OSTCBY,.OSTCBBitX和.OSTCBBitY用于加速任务进入就绪态的过程或进入等待事件发生状态的过程(避免在运行中去计算这些值)。这些值是在任务建立时算好的,或者是在改变任务优先级时算出的。.OSTCBDelReq是一个布尔量,用于表示该任务是否需要删除。,17,18,任务的调度-OSSched,uC/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。uC/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。,19,任务
12、的调度,就绪任务表:用于存贮每个任务的就绪状态标志。由两个变量组成:OSRdyGrp:8位,每位表示一组(8个)任务中是否有就绪的任务。OSRdyTbl:位图方式表示某个任务是否就绪。,20,就绪状态标志,Bit 0 in OSRdyGrp is 1 when any bit in OSRdyTbl0 is 1.Bit 1 in OSRdyGrp is 1 when any bit in OSRdyTbl1 is 1.Bit 2 in OSRdyGrp is 1 when any bit in OSRdyTbl2 is 1.Bit 3 in OSRdyGrp is 1 when any bit
13、 in OSRdyTbl3 is 1.Bit 4 in OSRdyGrp is 1 when any bit in OSRdyTbl4 is 1.Bit 5 in OSRdyGrp is 1 when any bit in OSRdyTbl5 is 1.Bit 6 in OSRdyGrp is 1 when any bit in OSRdyTbl6 is 1.Bit 7 in OSRdyGrp is 1 when any bit in OSRdyTbl7 is 1.,21,根据优先级找到任务在就绪任务表中的位置,22,根据优先级确定就绪表,假设优先级为12的任务进入就绪状态,12=1 100b
14、,则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;OSRdyTbl2|=0 x20;,23,根据优先级确定就绪表,从上面的计算我们可以得到:若第n位置1,则应该与2n 相或。uC/OS中,把2n的n=0-7的8个值 先计算好存在数组OSMapTbl7中,也就是:OSMapTbl0=20=0 x1;OSMapTbl1=21=0 x2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- uCOS 嵌入式 开发
链接地址:https://www.31ppt.com/p-5451411.html