【UC/OS2要得到目前就绪任务中最高优先级任务需要三个公式和一张表: Y = OSUnMapTbl[OSRdyGrp]; X = OSUnMapTbl[OSRdyTbl[y]]; prio = (Y << 3) + X; OSUnMapTbl[] 公式很简单: Y是求出最高优先级的行; X是求出最高优先级的列; OSUnMapTbl[]只有一个目的,就是得到OSRdyGrp和OSRdyTbl[y]最小位的位置。 如果OSRdyGrp是0x11的话,最小位的位置是0位,查OSUnMapTbl[]就得到Y=0,如果OSRdyGrp是0x12的话,最小位位置是1位,查OSUnMapTbl[]就得到Y=1。同理可以的到X的值。再通过prio = Y*8 + X 就可以得到最高优先级。当然,我们可以通过移位或者逐次相与来得到最高优先级,但都没有查表的速度快。不过可以节约ROM空间。】
文章评论(0条评论)
登录后参与讨论