原创 OSUnMapTbl

2009-7-8 18:09 2281 6 6 分类: MCU/ 嵌入式
UC/OS2要得到目前就绪任务中最高优先级任务需要三个公式和一张表: Y = OSUnMapTbl[OSRdyGrp]; X = OSUnMapTbl[OSRdyTbl[y]]; prio = (Y << 3) + X; OSUnMapTbl[] 公式很简单: Y是求出最高优先级的行; X是求出最高优先级的列; OSUnMapTbl[]只有一个目的,就是得到OSRdyGrpOSRdyTbl[y]最小位的位置。 如果OSRdyGrp0x11的话,最小位的位置是0位,查OSUnMapTbl[]就得到Y=0,如果OSRdyGrp0x12的话,最小位位置是1位,查OSUnMapTbl[]就得到Y=1。同理可以的到X的值。再通过prio = Y*8 + X 就可以得到最高优先级。当然,我们可以通过移位或者逐次相与来得到最高优先级,但都没有查表的速度快。不过可以节约ROM空间。】
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条