zoukankan      html  css  js  c++  java
  • ucosii --任务就绪表

    任务就绪表的任务就是高效的找出当前优先级最高的就绪任务.

    由任务就绪表OSRdyTbl和任务就绪组OSRdyGrb组成,OSRdyTbl每一个位都记录着一个任务的就绪状态,

    0非就绪1就绪,OSRdyGrb是为了快速的找出当前的最高就绪任务而设置的,把就绪表中的八个任务状态分为 一组,当这个组中有就绪状态的任务时,就在OSRdyGrb中相应的位置1.

    ●就绪表登记任务

    更改任务状态要做两个操作,一个事把任务就绪表中的相应位置1,一个事把相应的任务就绪组置1

    代码:

    OSRdyGrp|=OSMapTbl[prio>>3];

    OSRdyTbl[prio>>3]|=OSMapTbl[prio&0x07];

    第一个操作,prio>>3意思是除以prio/8,这样就正好是prio在任务就绪组中的第几位,然后为了方便给OSRdyGrp赋值,有一个OSMapTbl.

    第二个操作prio>>3找到OSRdyTbl中第几组,然后prio&0x07,就是prio%8,找出在该组的第几位.

    ●删除就绪任务

    删除就绪任务时首先给任务就绪表相应位置0,然后判断该组是否为零,意思是该任务组没有就绪任务了,然后给相应的任务就绪组置0;

    if((OSRdyTbl[Prio>>3])&==~OSMapTbl[prio&0x07])==0)

    OSRdyGrp|=~OSMapTbl[prio>>3];

    ●查找最高就绪任务(经典的以空间换时间)

    ①y=OSUnMapTb1[OSRdyGrp];

    x=OSUnMapTbl[OSRdyTb1[y]];

    prio=(y<<3)+x;

    或②

    y=OSUnMapTb1[OSRdyGrp];

    OSPrioHighRdy = (INT8U)((y<<3)+OSUnMapTb1[OSRdyTb1[y]]);

    这操作应该属于数学问题,用一个数组来枚举出现的结果.

  • 相关阅读:
    iOS9 HTTP 不能正常使用的解决办法
    IOS UIWebView的一些用法总结
    顺序查找
    循环队列
    队列的链式存储实现
    栈的链式存储实现
    顺序表的实现
    MessageBox函数
    二分法查找
    冒泡排序
  • 原文地址:https://www.cnblogs.com/wgang171412/p/5082019.html
Copyright © 2011-2022 走看看