2009年6月16日 星期二

chapter 6(cont)

※ OS_EventWaitListInit()
將.OSEventGrp和OSEventTbl都填0

※ loop unrolling

※ OS_EnentTaskRdy() 執行XXXPost時就會呼叫這個
從waitingQ裡找出優先權最高的task,放到readyQ裡面


y = OSUnMapTbl[prevent->OSEnentGrp];
bity = OSMapTbl[y];
x = OSUnMapTbl[prevent->OSEventTbl[y]];
bitx = OSMapTbl[x];
prio = (INT8U)((y<<3)+x);
從waitingQ裡找出最高優先權的task,將之移出waitingQ。
演算法和原本readyQ是一樣的。
ptcb->OSTCBDly = 0
塞0進去,因為已經等到了,所以設為0,否則之後會再叫醒一次
ptcb->OSTCBStat &= ~msk
令task變為ready

※ OS_EventTaskRdy() 總結
從waitingQ裡找出最高優先權的task,從waitingQ搬到readyQ。
然後在TCB裡做必要的修改。

沒有留言:

張貼留言