返回该小组首页 回复主题
invent-lwj

invent-lwj

小组等级:     E币:135  (E币换礼)

#1楼主:位图是怎么得出来的

文章发表于:2008-06-04 05:15

大家好:请教个问题,uc/os的位图是怎么得出来的,看上去似乎没什么规律,看不明白。呵呵呵,就是这个东东,编写者是怎么得出这个位图的呢,挺奇妙的,望高手解释一下。谢谢

INT8U  const  OSUnMapTbl[] = {
    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x00 to 0x0F                             */
    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                             */
};//256个东东,干嘛呢?

gaomidu

   小组等级:    E币:98  (E币换礼)

#2

文章发表于:2008-06-18 16:42

就是画点

 

darkrainbow

   小组等级:    E币:304  (E币换礼)

#3

文章发表于:2008-06-26 22:59

这个我到现在还没弄明白是怎么想出这个方法的.

lstzixing

   小组等级:    E币:352  (E币换礼)

#4

文章发表于:2008-07-08 17:18

8位二进制数,从0000 0000 到1111 1111.算每一个数中1所在的最低位(从0开始算起).

比如:

  0000 0000 -----> 0

  0000 0001------->0

  0000 0010 ------->1

  0000 0011------>0

  0000 0100------>1

  ........................................

  1111 1111 ------>0.

   这样的话就形成了一个映射.对一字节数,用值就可以找出这个数中1所在的最低位,也就是优先级最高的任务所对应的组号或单个组号中对应的位号.

 

  说白了,就是查表.

tiloog

   小组等级:    E币:1146  (E币换礼)

#5

文章发表于:2008-07-08 19:19

lstzixing的回答是正确的,只是有个地方笔误了,0000 0100------->2。

采用查表的方法可以加快任务调度的过程,如果不采用查表,那么还需要程序去解析优先级和任务组号之间的关系,这样速度就慢了,因为程序解析需要循环和移位操作。

映射表中的值实际上就是索引号第一个1所在的位置。

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

所有小组精华文章