UC/OS-II任务就绪表的理解

来源:互联网 发布:刷钻软件2017 编辑:程序博客网 时间:2024/05/05 05:59

任务就续表中有两个变量OSRdyTbl[]和OSRdyGrp。

OSRdyTbl[]:这个数组是INT8U类型的,它的每一个元素对应8个任务的就绪状态。比如数组元素为4个。则可以对应4*8=32个任务的就绪状态。



OSRdyGrp:这个变量为INT8U类型,这个变量每个位对应OSRdyTbl[]中的一个数组元素。只要OSRdyTbl[]中的数组元素不是0x00。那么OSRdyGrp的对应位就为1.否则为0。也就是说OSRdyTbl[]一个数组对应的8个任务状态只要有一个就绪。那么OSRdyGrp这个相应的位就为1。

eg:

OSRdyGrp=0x1110 0101 那么就是表示OSRdyTbl[0] [2] [5] [6] [7]任务组中有任务就绪。

怎么根据优先级来查找就绪表中的位置

优先级看做一个6位的二进制数,其中高三位表明OSRdyGrp的值。低三位表明OSRdyTbl[]中具体数组元素的值。 其实就是明OSRdyGrp指明OSRdyTbl[]数组中哪个元素。低三位则是这个元素的具体值。

OSUnMapTbl[]: 这个数组是为了找出最高优先级。因为可能有多个任务就绪。但是哪个优先级最高呢?就是由OSUnMapTbl[]数组来完成。

y = OSUnMapTbl[OSRdyGrp]; //找到最高优先级的组

x = OSUnMapTbl[OSRdyTbl[y];//找到这个组里最高优先级的位
OSPrioHighRdy = (INT8U)((y << 3) + x]); //算出最高优先级。

这两行代码就实现了找到最高优先级。

备注:第一次写博文。有不对的的地方欢迎拍砖。

0 0
原创粉丝点击