- OSTimeDly(), OSTimeDlyHMSM()
- 如果要delay至少一個tick,那必須呼叫OSTimeDly(2)。
- OSTimeDlyResume()
- 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
沒有留言:
張貼留言