Uc/OS II就緒表(Ready List)分析
就緒表(Ready List)
本文引用地址:http://dyxdggzs.com/article/201610/305950.htm每個(gè)任務(wù)被賦予不同的優(yōu)先級等級,從0級到最低優(yōu)先級OS_LOWEST_PR1O,包括0和OS_LOWEST_PR1O在內(見(jiàn)文件OS_CFG.H)。當uCOS II初始化的時(shí)候,最低優(yōu)先級OS_LOWEST_PR1O總是被賦給空閑任務(wù)idle task。注意,最多任務(wù)數目OS_MAX_TASKS和最低優(yōu)先級數是沒(méi)有關(guān)系的。用戶(hù)應用程序可以只有10個(gè)任務(wù),而仍然可以有32個(gè)優(yōu)先級的級別(如果用戶(hù)將最低優(yōu)先級數設為31的話(huà))。
每個(gè)任務(wù)的就緒態(tài)標志都放入就緒表中的,就緒表中有兩個(gè)變量OSRedyGrp和OSRdyTbl[]。在OSRdyGrp中,任務(wù)按優(yōu)先級分組,8個(gè)任務(wù)為一組。OSRdyGrp中的每一位表示8組任務(wù)中每一組中是否有進(jìn)入就緒態(tài)的任務(wù)。任務(wù)進(jìn)入就緒態(tài)時(shí),就緒表OSRdyTbl[]中的相應元素的相應位也置位。就緒表OSRdyTbl[]數組的大小取決于OS_LOWEST_PR1O(見(jiàn)文件OS_CFG.H)。當用戶(hù)的應用程序中任務(wù)數目比較少時(shí),減少OS_LOWEST_PR1O的值可以降低uCOS II對RAM(數據空間)的需求量。
為確定下次該哪個(gè)優(yōu)先級的任務(wù)運行了,內核調度器總是將OS_LOWEST_PR1O在就緒表中相應字節的相應位置1。OSRdyGrp和OSRdyTbl[]之間的關(guān)系見(jiàn)圖3.3,是按以下規則給出的:
當OSRdyTbl[0]中的任何一位是1時(shí),OSRdyGrp的第0位置1,
當OSRdyTbl[1]中的任何一位是1時(shí),OSRdyGrp的第1位置1,
當OSRdyTbl[2]中的任何一位是1時(shí),OSRdyGrp的第2位置1,
當OSRdyTbl[3]中的任何一位是1時(shí),OSRdyGrp的第3位置1,
當OSRdyTbl[4]中的任何一位是1時(shí),OSRdyGrp的第4位置1,
當OSRdyTbl[5]中的任何一位是1時(shí),OSRdyGrp的第5位置1,
當OSRdyTbl[6]中的任何一位是1時(shí),OSRdyGrp的第6位置1,
當OSRdyTbl[7]中的任何一位是1時(shí),OSRdyGrp的第7位置1,
程序清單3.5中的代碼用于將任務(wù)放入就緒表。Prio是任務(wù)的優(yōu)先級。
評論