學習筆記----關于uCOS-ll中就緒狀態表的理解 μC/OS_II進行任務調度的思想是 “近似地每時每刻總是讓優先級最高的就緒任務處于運行狀態” 。為了保證這一點,它在系統或用戶任務調用系統函數及執行中斷服務程序結束時總是調用調度器,來確定應該運行的任務并運行它。μC/OS_II進行任務調度的依據就是任務就緒表 為了能夠使系統清楚地知道,系統中哪些任務已經就緒,哪些還沒有就緒,μC/OS_II在RAM中設立了一個記錄表,系統中的每個任務都在這個表中占據一個位置,并用這個位置的狀態(1或者0)來表示任務是否處于就緒狀態,這個表就叫做任務就緒狀態表,簡稱叫任務就緒表 任務就緒表是由N個8位維數組組成(最多64個).一部分為OSRdyTbl[ ],另一部分為OSRdyGrp(無符號8位變量)。 在創建任務后,任務的優先級就確定了,比如13。把64個任務優先級分成8個隊,第一隊是1---8,第二隊是9---17,。。。。如果要查一下13優先級的任務在那個位置,首先看一下大體在那個隊,大于8應該在在第二隊,那就不看第一隊了,看第二隊好了,對二隊從9開始到17了,大概在第5位置。計算機也是這樣工作的,先分組,再定位。 讓我們以優先級為13為例子,分析一下先分組再定位的內部機理吧。既然是計算機用的,就寫成二進制 0000 1101 把D5、D4、D3、分為一組 001 D2、D1、D0分為一組 101 可見是一組5位。再以一個復雜的優先級63分析一下: 0011 1111 把D5、D4、D3、分為一組 111 D2、D1、D0分為一組 111 可見是第7組第7位。這樣看起來很清爽的。 把D5、D4、D3確定的十進制數作為OSRdyGrp的8個位標志,如上面的001和111,分別是OSRdyGrp的第1位和第7位置1,代表第一隊和第7隊有需要查找的優先級。這樣共可以分為8個隊。 把D2、D1、D0確定的十進制數作為OSRdyTbl[]的8個位標志,如上面的101和111,分別是OSRdyTbl[1]隊和OSRdyTbl[7]隊的第1位和第7位置1,代表第一隊的第一個位和第7隊的第7個位有需要查找的優先級。 對計算機而言,一個任務創建后,就根據二進制把它分解為上述的兩個部分。并根據這兩個部分分別對相應OSRdyGrp和OSRdyTbl[]的位置1,這樣就完成了任務的就緒。
|