μCOSⅡ中的任务调度.ppt

上传人:创****公 文档编号:4153864 上传时间:2021-03-06 格式:PPT 页数:17 大小:1.45MB
返回 下载 相关 举报
μCOSⅡ中的任务调度.ppt_第1页
第1页 / 共17页
μCOSⅡ中的任务调度.ppt_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《μCOSⅡ中的任务调度.ppt》由会员分享,可在线阅读,更多相关《μCOSⅡ中的任务调度.ppt(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C/OS中的任务调度,Group01小组柴永锋李逢春苗 冬,相关介绍,C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。 C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的 C/OS II 2.51版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。 C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关,任务状态,任务控制块(TCB),任务控制块 OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。 所有的任务控制块分为两条链表,空闲链表和使用链表。

2、,C/OS-II任务控制块.ucos-ii.h,typedef struct os_tcb OS_STK *OSTCBStkPtr; 指向当前任务栈顶的指针 #if OS_TASK_CREATE_EXT_EN0 void *OSTCBExtPtr; 指向用户定义的任务控制块扩展 OS_STK *OSTCBStkBottom; 指向任务栈底的指针 INT32U OSTCBStkSize; 栈中可容纳的指针元数 INT16U OSTCBOpt; 把“选择项”传给OSTaskCreateExt() INT16U OSTCBId; 任务的识别码 #endif struct os_tcb *OSTCBN

3、ext; 任务控制块OS_TCBs的双重链接 struct os_tcb *OSTCBPrev; #if OS_EVENT_EN OS_EVENT *OSTCBEventPtr; /* 指向事件控制块*/ #endif,C/OS-II任务控制块.ucos-ii.h,#if (OS_Q_EN0) ,与TCB相关的结构,两个关键: 优先级数分解为高三位和低三位分别确定; 高优先级有着小的优先级号 ;,优先级和就绪任务表的位置关系,每个就绪的任务都放入就绪表中(ready list)中,就绪表有两个变量:OSRdyGrp、OSRdyTbl,优先根据优先级确定就绪表(1),假设优先级为12的任务进入就

4、绪状态,12=1100b,则OSRdyTbl1的第4位置1,且OSRdyGrp的第1位置1,相应的数学表达式为: OSRdyGrp |=0 x02; OSMapTbl1=(0000 0010) OSRdyTbl1 |=0 x10; OSMapTbl4=(0001 0000) 而优先级为21的任务就绪21=10 101b,则OSRdyTbl2的第5位置1,且OSRdyGrp的第2位置1,相应的数学表达式为: OSRdyGrp |=0 x04; OSMapTbl2=(0000 0100) OSRdyTbl2 |=0 x20; OSMapTbl5=(0010 0000),根据优先级确定就绪表(2),

5、从上面的计算我们可以得到:若OSRdyGrp及OSRdyTbl的第n位置1,则应该把OSRdyGrp及OSRdyTbl的值与2n 相或。uC/OS中,把2n的n=0-7的8个值先计算好存在数组OSMapTbl7中,也就是: OSMapTbl0 =20=0 x01(0000 0001) OSMapTbl1 =21=0 x02(0000 0010) ,1,00000010,3,00001000,5,00100000,Index,Bit Mask (Binary),使任务进入就绪态,如果prio是任务是优先级,也是任务的识别号,则将任务放入就绪表,即使任务进入就绪态的方法是: OSRdyGrp |=

6、OSMapTblprio3; OSRdyTblprio3 |=OSMapTblprio ,根据就绪表确定最高优先级,通过OSRdyGrp值确定高3位,假设为0 x24=100 100b, - 对应OSRdyTbl2 和OSRdyTbl5,高优先级为2 通过OSRdyTbl2的值来确定低3位, 假设为0 x12=010 010b ,-第2个和第5个任务,取高优先级为2,则最高优先级的任务号为17,源代码中使用了查表法,查表法具有确定的时间,增加了系统的可预测性,uC/OS中所有的系统调用时间都是确定的 High3 =OSUnMapTblOSRdyGrp; Low3 =OSUnMapTblOSRd

7、yTblHigh3; Prio =(High33)+Low3;,优先级判定表OSUnMapTbl256(os_core.c),INT8U const OSUnMapTbl = 0, 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,

8、 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, 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,

9、 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, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 ;,举例: 如OSRdyGrp的值为00101000B,即0X28,则查得OSUnMapTblOSRdyGrp的值是3,它相应于OSRdyGrp中的第3位置1; 如OSRdyTbl3的值是11100100B,即0XE4,则查OSUnMapTblOSRdyTbl3的值是2,则进入就绪态的最高任务优先级 Prio=3*8+2=26,Task scheduler,void OS_Sched (void) /*os_core.c中*/ INT8U y; OS_ENTER_CRITICAL(); if (OSLockNesting =0) ,谢谢!,

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

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com