2009年3月6日 星期五

uc-os ii 調度

調度 -->
中斷級 (由時間中斷產生,並且找出優先權最高的任務)
任務級 (也就是任務 taska 自己 delay or pend semi 等事件發生時)

void TaskStartyya(void *yydata) reentrant;
void TaskStartyyb(void *yydata) reentrant;

曾經認為調度後的進入點,都是task的進入點 (錯誤),下面嘗試說明錯誤點
ex >做完 something1 之後, OSTimeDly使進入任務級切換,當延遲完成後,中斷級調度會使任務從 do something2 開始 (how to catch that point )
ex> 做完 something2 之後, 有可能中斷級調度發生,當高優先權任務完成,中斷級調度會使任務從 do something3 開始
taskA
{
do something1
OSTimeDly(10);
do something2
do something3

}

(how to catch that point )
OSTimeDly -> OSSched -> OS_TASK_SW 任務級調度
(呼叫切換函數,故下一指令 OS_EXIT_CRITICAL 的 位址被 push to stack 硬體機制做掉)

中斷級調度( 延時完成後) taskA 所返回的順序
OS_TASK_SW(OS_EXIT_CRITICAL) -> OSSched -> OSTimeDly -> do something2

沒有留言:

張貼留言