ucos优先级位图算法分析.doc

上传人:夏** 文档编号:564412348 上传时间:2023-05-13 格式:DOC 页数:6 大小:197.52KB
返回 下载 相关 举报
ucos优先级位图算法分析.doc_第1页
第1页 / 共6页
ucos优先级位图算法分析.doc_第2页
第2页 / 共6页
ucos优先级位图算法分析.doc_第3页
第3页 / 共6页
ucos优先级位图算法分析.doc_第4页
第4页 / 共6页
ucos优先级位图算法分析.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《ucos优先级位图算法分析.doc》由会员分享,可在线阅读,更多相关《ucos优先级位图算法分析.doc(6页珍藏版)》请在金锄头文库上搜索。

1、Ucos优先级位图算法详解By lynn http:/ ucos任务相关简介在实时操作系统中,由于系统不可能太庞大,因此任务数量也不会太大,ucos中共有64个优先级(063级,数字越小优先级越高)。因为是实时系统,所以对应每个任务就分配一个优先级。2.二进制和十进制的转换数学基础这里先介绍一个数学知识,二进制如何变为十进制,比如 十进制26,其8位二进制表示为:00011010。当十进制为063时,前两位无作用,所以只看后6位,011 010.怎么计算成十进制呢?很简答:如下所示这个过程就是,把这个十进制数,分为两个部分,高三位和低三位,这个十进制数的大小就等于高三位的十进制*8+第三位的十

2、进制数。高三位的011=3 ,低三位的010=2.所以26=3*8+2.=(011)3; (1) OSRdyTblprio3 |= OSMapTblprio&0x07; (2)代码解释:prio3是获取优先级的高3位,prio&0x07是获取优先级的低3位。然后在通过OSMapTbl的映射分别获得了就绪表中的行和就绪表中的列,然后查询就绪算法:y = OSUnMapTblOSRdyGrp;x = OSUnMapTblOSRdyTbly;prio = (y 3= OSRdyTbl1=0000 1000 ,通过这句代码就往就绪表第一行(从OSRdyTbl1看到)第3个位置(从右往左看0000 10

3、00,第一个为1的位,0开始。)写入1,表明该任务就绪了。这样就完成了 优先级的标定4 多个任务参与下 怎么选定最高的优先级任务此时又要加入一个表格:优先级判定表OSUnMapTbl,这个表的作用是为了节省时间,这样查表的话,耗的时间是一定的,很好的满足了实时性。下面来分析这个表的作用。1.先看最旁边的注释,说明的是该数组中对应的位置。2.解释 这个数组中内容,这些数字怎么来的。 举例:0x53 如上图所示的位置,为什么是0呢?我们把0x53变成二进制来看:0101 0011,从右往左看,第一个出现1的位 就是0位所以为0.为什么是从右往左看呢?因为高优先级的数字低,你应该懂的。例子 :有4个

4、任务 ,优先级分别为6,10,11,17.。把上面就绪任务算法再贴一遍:前面2位不管。6对应二进制:000 110 高3位:000=0 通过OSMapTbl映射后,OSMapTblprio3= OSMapTbl0=0000 0001低3位:110=6,通过OSMapTbl映射后OSRdyTblprio3= OSRdyTbl0=0100 0000 10对应二进制:001 010 高3位:001=1 通过OSMapTbl映射后,OSMapTblprio3= OSMapTbl1=0000 0010.低3位:010=2,通过OSMapTbl映射后OSRdyTblprio3= OSRdyTbl1=000

5、0 0100 11对应二进制:001 011 高3位:001=1 通过OSMapTbl映射后,OSMapTblprio3= OSMapTbl1=0000 0010.低3位:011=3,通过OSMapTbl映射后OSRdyTblprio3= OSRdyTbl1=0000 1000 17对应二进制:010 001 高3位:010=2 通过OSMapTbl映射后,OSMapTblprio3= OSMapTbl2=0000 0100.低3位:001=1,通过OSMapTbl映射后OSRdyTblprio3= OSRdyTbl2=0000 0010通过就绪任务算法:OSRdyGrp |= OSMapTb

6、lprio3; (1) OSRdyTblprio3 |= OSMapTblprio&0x07; (2)最后OSRdyGrp的值就是将所有的OSMapTblprio3进行位或运算:OSRdyGrp=0100 0000|0000 0010| 0000 0010|0000 0100= 0000 0111=0x07OSRdyTbl0=0100 0000OSRdyTbl1=0000 0100 |0000 1000=0000 1100 (相同的列 要或运算)OSRdyTbl2=0000 0010然后在查找优先级判定表OSUnMapTbl OSRdyGrp=0x07Y=OSUnMapTbl0x07=0.说明是最高优先级在第0组。OSRdyTbl0=0100 0000=0x40X= OSUnMapTbl0x40=6最高优先级为:prio= y*8+x=6至此,最高优先级就选出来了。然后调度此任务运行就是了,另外,删除任务就是将对应就绪列表位的置的1清零就是。if (OSRdyTblprio 3 &= OSMapTblprio & 0x07) = 0) OSRdyGrp &= OSMapTblprio 3; 看到这里,这行代码理解应该没有问题,就是反操作而已。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号