OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStatHook(),OSTimeTickHook()

當用OSTaskCreate()或OSTaskCreateExt()建立任務的時候就會調用OSTaskCreateHook()。該函數允許用戶或使用用戶的移植實例的用戶擴展µC/OS-Ⅱ的功能。當µC/OS-Ⅱ設置完了自己的內部結構後,會在調用任務調度程序之前調用OSTaskCreateHook()。該函數被調用的時候中斷是禁止的。因此用戶應儘量減少該函數中的代碼以縮短中斷的響應時間。
	當OSTaskCreateHook()被調用的時候,它會收到指向已建立任務的OS_TCB的指針,這樣它就可以訪問所有的結構成員了。當使用OSTaskCreate()建立任務時,OSTaskCreateHook()的功能是有限的。但當用戶使用OSTaskCreateExt()建立任務時,用戶會得到OS_TCB中的擴展指針(OSTCBExtPtr),該指針可用來訪問任務的附加數據,如浮點寄存器,MMU寄存器,任務計數器的內容,以及調試信息。
	只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置爲1時纔會產生OSTaskCreateHook()的代碼。這樣,使用用戶的移植實例的用戶可以在其它的文件中重新定義hook函數。
當任務被刪除的時候就會調用OSTaskDelHook()。該函數在把任務從µC/OS-Ⅱ的內部任務鏈表中解開之前被調用。當OSTaskDelHook()被調用的時候,它會收到指向正被刪除任務的OS_TCB的指針,這樣它就可以訪問所有的結構成員了。OSTaskDelHook()可以用來檢驗TCB擴展是否被建立了(一個非空指針)並進行一些清除操作。OSTaskDelHook()不返回任何值。
	只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置爲1時纔會產生OSTaskDelHook()的代碼。

當發生任務切換的時候調用OSTaskSwHook()。不管任務切換是通過OSCtxSw()還是OSIntCtxSw()來執行的都會調用該函數。OSTaskSwHook()可以直接訪問OSTCBCur 和OSTCBHighRdy,因爲它們是全局變量。OSTCBCur指向被切換出去的任務的OS_TCB,而OSTCBHighRdy指向新任務的OS_TCB。注意在調用OSTaskSwHook()期間中斷一直是被禁止的。因爲代碼的多少會影響到中斷的響應時間,所以用戶應儘量使代碼簡化。OSTaskSwHook()沒有任何參數,也不返回任何值。
	只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置爲1時纔會產生 O
OSTaskStatHook()每秒鐘都會被OSTaskStat()調用一次。用戶可以用OSTaskStatHook()來擴展統計功能。例如,用戶可以保持並顯示每個任務的執行時間,每個任務所用的CPU份額,以及每個任務執行的頻率等等。OSTaskStatHook()沒有任何參數,也不返回任何值。
	只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置爲1時纔會產生OSTaskStatHook()的代碼。

STaskSwHook()的代碼。


OSTaskTimeHook()在每個時鐘節拍都會被OSTaskTick()調用。實際上,OSTaskTimeHook()是在節拍被µC/OS-Ⅱ真正處理,並通知用戶的移植實例或應用程序之前被調用的。OSTaskTimeHook()沒有任何參數,也不返回任何值。
	只用當OS_CFG.H中的OS_CPU_HOOKS_EN被置爲1時纔會產生OSTaskTimeHook()的代碼。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章