zoukankan      html  css  js  c++  java
  • OSUnMapTbl[ ] 解析

    OSRdyGrp确定了优先级的次低三位(bit5-bit3),OSOSRdyTbl确定了优先级的低三位(bit2-bit0), 

    OSRdyGrp = 0x011;  //0b00010001 
    OSRdyTbl[0] = 0x0a; //0b00001010 
    OSRdyTbl[4] = 0x01; //0b00000001 
    计算出存在的几个优先级为;0*8+1=1,0*8+3=3,4*8+0=32 
    假设OSRdyGrp最低位为1的是X位,OSRdyTbl[X]最低为1的是Y位, 
    则优先级=X*8+Y 
    因此只要知道了上述的X,Y就可算出最高优先级 
    OSUnMapTbl就是将0x00-0xff每个数据中最低位为1的位数一一列举出来 
    INT8U  const  OSUnMapTbl[256] = { 
        0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x00 to 0x0F                             */ 
        //OSUnMapTbl[0]     
        //OSUnMapTbl[1]    1        bit0        
        //OSUnMapTbl[2]    2        bit1  
        //OSUnMapTbl[3]    3        bit0  
        //................ 

        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x10 to 0x1F                             */ 
        5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x20 to 0x2F                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x30 to 0x3F                             */ 
        6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x40 to 0x4F                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x50 to 0x5F                             */ 
        5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x60 to 0x6F                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x70 to 0x7F                             */ 
        7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x80 to 0x8F                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x90 to 0x9F                             */ 
        5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xA0 to 0xAF                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xB0 to 0xBF                             */ 
        6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xC0 to 0xCF                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xD0 to 0xDF                             */ 
        5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xE0 to 0xEF                             */ 
        4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0        /* 0xF0 to 0xFF                             */ 
    }; 

    X = OSUnMapTbl[OSRdyGrp]; 
    Y = OSUnMapTbl[OSRdyTbl[X]]; 
    最高优先级为X*8+Y 

    注:

    X = OSUnMapTbl[OSRdyGrp];

    此句的试举例以得此推论(只找从低位起,首次出现就绪标志“1”的那个座位号,从0号数起....):

    如:OSRdyGrp=0x00;%00000000,<-字节里没有出现“1”,默认OSUnMapTbl[1]表中第1号元素,位置号为0

    如:OSRdyGrp=0x01;%00000001,<-字节里第0位出现“1”,即OSUnMapTbl[1]表中第1号元素,位置号为0

    如:OSRdyGrp=0x02;%00000010,<-字节里第1位出现“1”,即OSUnMapTbl[2]表中第2号元素,位置号为1

    如:OSRdyGrp=0x03;%00000011,<-字节里第0位出现“1”,即OSUnMapTbl[3]表中第3号元素,位置号为0

    如:OSRdyGrp=0x04;%00000100,<-字节里第1位出现“1”,即OSUnMapTbl[4]表中第4号元素,位置号为2

    ...........

    ...........

    以 此推之便得到unUnMapTbl[]表,该表的最重要的作用:就是放进一个字符型数据(不大于255的数),就可以找到该数据  最低位是“1”的是哪个位!以此将就绪组放进去,查到的是最低就绪组,找到最低就绪组x后,再把改组的数据放进去,然后查到的是最低就绪组里的数据的最低 位是“1”的是哪个位y........

    那么:最高优先级为X*8+Y  解决!!

  • 相关阅读:
    Linux命令学习—— fdisk -l 查看硬盘及分区信息
    UE4 Runtime下动态给Actor添加组件
    如何批量下载网站网页
    ue4 motage
    帧同步相关
    张瀚荣:如何用UE4制作3D动作游戏
    游戏服务器架构演进(完整版)
    Digital Mike头发制作及渲染的深度揭秘
    [UE4]如何替换角色Mesh上的Material材质
    [UE4]用C++如何创建Box Collision
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2999536.html
Copyright © 2011-2022 走看看