2009年6月21日 星期日

MicroCOS-II -CH5

Time management

  • OSTimeDly(), OSTimeDlyHMSM()
- 讓一個Task將自己給delay參數為tick的時間。
- 如果要delay至少一個tick,那必須呼叫OSTimeDly(2)。
  • OSTimeDlyResume()
回復一個被delay的task。
  • OSTimeSet(), OSTimeGet()
設定或取得系統時間。


OSTimeTick

每次進來就去將OSTCBList裡所有Task裡OSTCBDly不是0的值減1,
如果OSTCBDly減完後變0且那個Task沒被其他Task suspend的話,
就將他移入ready queue。
如果減成0時有suspend,就將他Dly設1。




















Timer


這裡兩種Timer處理ISR- OSTickISR的實作方式

(1) OSTickISR 直接呼叫OSTimeTick,
OSTickISR裡有實際去處理interrupt發生時的handle。





















(2) OSTickISR沒有直接去處理interrupt的handle,
還是在interrupt發生時送一個訊息給一個TickTask,這個Task收到訊息去呼叫
OSTimeTick。

在這裡我們稱OSTimeTick為top-half,
TickTask為buttom-half。





















補充
※Top half 是在呼叫 Interrupt 時所指定的 interrupt handler 函數,bottom half 則是由 top half 所排程(scheduling),真正負責回應中斷的 task。
Top half 是真正接受中斷請求的 task,因此應避免執行過久。由 top half 的實作原則可以看出,top half 真正要做的工作其實只有排程 bottom half,因此執行的速度將會非常快。

補充參考來源: http://www.jollen.org/blog/2008/03/interrupt_handling_bottom_half.html


沒有留言:

張貼留言