在系統中,所有已經就緒等待執行的任務都被放入乙個所謂「就緒表」(ready list)中,該錶包括兩部分
1.1 就緒優先順序位對映表
每一位代表乙個優先順序,當某一優先順序由任務就緒時,在就緒優先順序位對映表中該優先順序對應的位被置1,之所以按照上圖的順序對映,是為了便於使用一條特殊的指令「計算前導零」,該指令可以顯著提高最高優先順序查詢的速度。
優先順序操作函式函式
說明os_priogethighest()
查詢就緒的最高優先順序
os-prioinsert()
置位優先順序位對映表中對應優先順序的位
os_prioremove()
清零優先順序位對映表中對應優先順序的位
1.2 就緒任務列表
struct os_rdy_list
;
就緒表操作函式函式
說明os_rdylistinit()
初始化並清空就緒表
os_rdylistinsert()
在就緒表中插入乙個任務控制塊tcb
os_rdylistinserthead()
在就緒表頭部插入乙個任務控制塊tcb
os_rdylistinserttail()
在就緒表尾部插入乙個任務控制塊tcb
os_rdylistmoveheadtotail()
將乙個任務控制塊tcb從鍊錶頭部移動到尾部
os_rdylistremove()
將任務控制塊從就緒表中刪除
1.2.1 向就緒任務列表中增加任務
程式可以同過系統提供的多個服務將任務加入到就緒任務列表中。最常見的服務時建立任務ostaskcreate(),該操作將建立乙個就緒的任務並加入到就緒任務列表中,下圖表示在已有優先順序的就緒任務列表中新建立乙個與其優先順序相同的任務,並將該任務插入就緒任務列表中
如果乙個任務進入就緒態時和當前正在執行的任務是同一任務優先順序下,那麼進入就緒態的任務就會被插入到相應優先順序就緒任務列表的尾部,然而如果進入就緒的任務和當前正在執行的任務的優先順序不一樣,那麼就緒態的任務將會被插入到相應優先順序就緒任務列表的頭部。
C OS III 任務掛起錶
當乙個任務等待訊號量 互斥型訊號量 時間標誌組或訊息佇列時,該任務就被放入任務掛起錶或等待表中,帶有任務掛起錶的核心物件如下 核心物件 訊號量 互斥訊號量 os sem os mutex 訊號量 事件標誌組 os sem os grp 訊息佇列 os q 每種核心物件的頭部都包含三個相同的資料域,第...
uC OS II任務就緒表
ii任務就緒表 rel noopener noreferrer uc os ii任務就緒表 simplorer 先來了解一下uc os ii的任務狀態。uc os ii的任務共分為五種狀態 dormant 休眠 waiting 等待 running 執行 ready 就緒 以及isp 中斷 dorm...
ucos II 任務就緒表學習筆記
就緒表中有兩個變數 osrdygrp和 osrdytbl.這兩個變數的對應關係是 osrdytbl n 中任何一位是1時,osrdygrp 的第n 位 是1。相當於osrdygrp 是osrdytbl的索引。具體的對應關係如下圖 陣列osrdytbl 8 按位來算的話正好是64個位 64個優先順序。...