任務就緒表
任務就緒表的任務就是高效的找出當前優先順序最高的就緒任務.
由任務就緒表osrdytbl和任務就緒組osrdygrb組成,osrdytbl每乙個位都記錄著乙個任務的就緒狀態,
0非就緒1就緒,osrdygrb是為了快速的找出當前的最高就緒任務而設定的,把就緒表中的八個任務狀態分為一組,當這個組中有就緒狀態的任務時,就在osrdygrb中相應的位置1.
●就緒表登記任務
更改任務狀態要做兩個操作,乙個事把任務就緒表中的相應位置1,乙個事把相應的任務就緒組置1
**:osrdygrp|=osmaptbl[prio>>3];
osrdytbl[prio>>3]!=osmaptbl[prio&0x07];
第乙個操作,prio>>3意思是除以prio/8,這樣就正好是prio在任務就緒組中的第幾位,然後為了方便給osrdygrp賦值,有乙個osmaptbl.
第二個操作prio>>3找到osrdytbl中第幾組,然後prio&0x07,就是prio%8,找出在該組的第幾位.
●刪除就緒任務
刪除就緒任務時首先給任務就緒表相應位置0,然後判斷該組是否為零,意思是該任務組沒有就緒任務了,然後給相應的任務就緒組置0;
if((osrdytbl[prio>>3])&==~osmaptbl[prio&0x07])==0)
osrdygrp|=~osmaptbl[prio>>3];
**意思和上面的差不多,不在解釋.
●查詢最高就緒任務(經典的以空間換時間)
y=osunmaptbl[osrdygrp];
x=osunmaptbl[osrdytbl[y]];
prio=(y<<3)+x;
這操作應該屬於數學問題,用乙個陣列來列舉出現的結果,這個zp就無法分析了.應該算是比較經典的空間換時間的案例,學習.
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個優先順序。...
UCOSII學習 二 任務管理
uc os ii 中最多可以支援64 個任務,分別對應優先順序0 63,其中0 為最高優先順序。63為最低階,系統保留了4個最高優先順序的任務和4個最低優先順序的任務,所有使用者可以使用的任務數有56個。uc os ii提供了任務管理的各種函式呼叫,包括建立任務,刪除任務,改變任務的優先順序,任務掛...