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