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