曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6203|回复: 0
打印 上一主题 下一主题

uc/os的优先级及就绪表相关

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2008-11-16 22:32:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uc/os的优先级及就绪表相关
一、优先级 prio(字节型数据)
xx 1/0 1/0 1/0 1/0 1/0 1/0


D7D6 D5 D4 D3 D2 D1 D0



其中,D5~D3 表示“第几组”,D2~D0 表示“第几组里的第几个”。D7~D6 无用。

二、OSRdyGrp
有就绪任务存在的组。OSRdyGrp 其实就是一个 INT8U 的一个字节,每一位代表一个组,置位则表示这个组有已经就绪的任务,清零则表示这个组没有就绪的任务。

三、OSRdyTbl[ ]
就绪表,每一个元素是个 INT8U 字节型数据,每个字节的每一位分别代表一个任务,1为就绪,0为未就绪。

四、OSMapTbl[ ]
OSMapTbl[ 0 ] = 00000001B
OSMapTbl[ 1 ] = 00000010B
OSMapTbl[ 2 ] = 00000100B
OSMapTbl[ 3 ] = 00001000B
OSMapTbl[ 4 ] = 00010000B
OSMapTbl[ 5 ] = 00100000B
OSMapTbl[ 6 ] = 01000000B
OSMapTbl[ 7 ] = 10000000B
掩码,加速 cu/os-ii 的运算。
让一个 prio 的优先级变成就绪态
OSRdyGrp | = OSMapTbl[ prio>>3 ]  // prio>>3 得到组号,在 0~7 之间
OSRdyTbl[ prio >>3 ] |= OSMapTbl[ prio & 0x07 ]  // prio & 0x07==>得到第XX组中的第几个任务号
                                                                              // OSRdyTbl[ prio>>3 ] 定位到就绪组号
                                                                            // 合并起来意思就是,在第XX组中第XX个任务就绪了

使一个优先级为 prio 的任务脱离就绪态
if(( OSRdyTbl[ prio>>3 ] &= ~OSMapTbl[ prio&0x07 ] )== 0 )  //如果这个组都已经没有就绪任务了...
                OSRdyGrp &= ~OSMapTbl[ prio >> 3]                    //...这个组的就绪状态标志就清掉吧

五、在任务就绪表中获取优先级别最高的就绪任务的 prio
y = OSUnMapTbl[ OSRdyGrp ]                  //从所有就绪的组中找到组号最小的那个组
                                                                  //如有第1,3,5组中有任务就绪,就么找到的就是第1组的组号 1,即y=1)
x = OSUnMapTbl[ OSRdyTbl[y] ]                //从上面得到的那个组中再找到位号最低的那个任务
                                                                //接上面的第1组中,如有第5,6,4,0号任务就绪,那么找到的任务号
                                                                //就是 0,即 x = 0
故有:
prio = ( y << 3 ) + x
六、在任务 TCB 中,上述相关量的表示法
OSTCBY          =    priority >> 3
OSTCBBitY      =    OSMapTbl[ priority >> 3]
OSTCBX          =    priority & 0x07
OSTCBBitX      =    OSMapTbl[ priority & 0x07 ]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-6-2 16:31 , Processed in 0.108928 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表