rock_man 发表于 2010-8-20 10:06:35

学习UC/OS遇到的一个问题(关于OSUnMapTbl[],已解决)

任务调度的过程中,任务调度器通过OSRdyGrp,OSRdyTbl[],OSUnMapTbl[]来获得当前最高优先级别就绪任务的优先级。
问题是:OSUnMapTbl[]这个表的数据是如何得出来的?
望高手能分析一下。

xuxi2009 发表于 2010-8-20 10:30:28

http://cache.baidu.com/c?m=9d78d513d9d437ad4f9d92690d678a275e08df307e91804b6b93d3169c3e1d070571e2c83a3f405a8e906b6776ac4d5dfdf041236a5c3df0ca95c948d8b9982a2f95776a2d499b0054805ff49a5b20c022915deba81ce7b8f23892a9d1d1de5752c0520e7d9d&p=9a759a40d2945dfc57e98c2a4c52&user=baidu
原来我这个博客里有解释的,可惜过期了
幸好百度快照还能找到,解释的很详细,希望能帮到你

xuxi2009 发表于 2010-8-20 10:35:55

点击此处下载 ourdev_576407.rar(文件大小:34K) (原文件名:动手写OSUnMapTbl及其相关原理分析.rar)

wenwu 发表于 2010-8-20 10:37:17

从最低位开始数,第一个是1的位的位数。
比如
0 - 0b0000 0000 --> 0
1 - 0b0000 0001 --> 0 (第0位是1)
2 - 0b0000 0010 --> 1 (第1位是1)
……
63- 0b0011 1111 --> 0 (第0位是1)
……
255-0b1111 1111 --> 0 (第0位是1)

rock_man 发表于 2010-8-20 10:53:13

谢谢以上各位。
我在网上找到这么一句话:表中的数值表示的是一个8bit的数据最低位为1的位置。
按照这句话,我用VB写了一个验证程序,得到了表中的数据,完全正确。
0 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
5 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
6 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
5 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
7 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
5 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
6 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
5 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0
=======================================
这是验证得到的结果
给出VB验证的代码
=========================
Dim i As Integer, j As Integer, k As Integer
Dim temp(7) As Byte

temp(0) = 1: temp(1) = 2
temp(2) = 4: temp(3) = 8
temp(4) = 16: temp(5) = 32
temp(6) = 64: temp(7) = 128

txtResult.Text = ""

For i = 0 To 255
    If i = 0 Then
      txtResult.Text = i & " "
      k = k + 1
    Else
      For j = 0 To 7
            If i And temp(j) Then
                Exit For
            End If
      Next j
      txtResult.Text = txtResult.Text & j & " "
      k = k + 1
      If (k Mod 16) = 0 Then
            txtResult.Text = txtResult.Text & Chr(13) + Chr(10)
      End If
    End If
Next i
页: [1]
查看完整版本: 学习UC/OS遇到的一个问题(关于OSUnMapTbl[],已解决)