2009年6月3日 星期三

Time Management: OSTimeDly(), OSTimeDlyHMSM()

OSTimeDly()

這函數的功能是指定一個task,讓它延遲一段時間,這時間的長短是用tick來決定。首先跟據tick的值來判斷,如果是0,表示不用延遲,反之就會將task延遲,然後判斷此task是否在ready queue中,並將此task從ready queue移除,接著就會將要延遲的tick數目儲存到TCB的OSTCBDly中,透過OSTimeTick()每隔一個tick的時間就減少一個延遲的tick數目。OSTCBDly中如果有一個非0值,就可以讓OSTimeTick()知道task正在被延遲。最後,呼叫OS_Sched()進行context switch,然後執行下一個優先權最高的task。

OSTimeDlyHMSM()

這函式一開始要檢驗使用者是否輸入了有較的時間格式,如果錯誤就回傳錯誤訊息。過後將輸入的時間單位轉換成clock tick的總數,再計算出要延遲多少次超過65535個tick的數目和剩下的tick數目,再執行OSTimeDly延遲算出來的tick數目。進入while迴圈,將65536分成兩次延遲,直到loops等於0為止。如果一開始就沒有義要延遲,就會離開OSTimeDlyHMSM()函式。

沒有留言:

張貼留言