Hook函數是RTOS中的一個關鍵特性,通過該函數,用戶可以增強對任務管理的控制,定義系統行為。
鉤子函數是嵌入到在已有源代碼中的函數調用,使用戶能夠在內核或應用程序流中添加自定義代碼。在RTOS中,鉤子函數提供了一種在不修改內核代碼的情況下,擴展內核行為的方法。
鉤子函數可以是強制的,也可以是可選的,強制鉤子函意味著應用程序必須定義鉤子函數實現,如果沒有定義,將觸發系統錯誤。可選鉤子函數預定義為弱函數,用戶可以提供自定義實現,在鏈接時覆蓋已有定義。
在SAFERTOS中,鉤子函數在內核代碼中實現,并且有幾個預定義的鉤子函數供用戶使用。這些鉤子分為強制和可選兩類:
強制鉤子函數
vApplicationErrorHook
vApplicationErrorHook函數是SAFERTOS中唯一的強制鉤子函數,用于向應用程序報告不可恢復的錯誤,如堆棧溢出或任務控制塊(TCB)損壞。應用程序通過此函數將系統置于安全狀故障態(如關閉電機或停止運行)。vApplicationErrorHook函數有兩個參數:xHandleOfTaskWithError和xErrorCode,可以幫助識別錯誤的原因,函數不會返回。
可選鉤子函數
vApplicationSetupTickInterruptHook
vApplicationSetupTickInterruptHook用于設置系統滴答定時器。作為預定義的弱函數,實現默認定時器的初始化,但應用程序可以使用不同設置的自定義定時器覆蓋。該函數有兩個參數:ulClockH(處理器的時鐘頻率,單位是Hz)和ulRateHz(期望的滴答頻率,單位是Hz)。
vApplicationTaskDeleteHook
vApplicationTaskDeleteHook在內核刪除任務時調用。該函數可以在任務從系統中刪除時執行清理或記錄工作,參數為xTaskBeingDeleted。
vApplicationTickHook
vApplicationTickHook從滴答中斷服務程序中調用。預定義的弱函數為空。該函數在ISR上下文調用,因此函數應盡可能保持簡短且非阻塞。
vApplicationIdleHook
系統運行空閑任務時,內核調用vApplicationIdleHook。vApplicationIdleHook允許應用程序執行后臺操作,或者在沒有高優先級任務準備執行時將處理器置于低功耗狀態。
移植相關的鉤子函數
SAFERTOS的一些處理器接口層還定義了額外的鉤子函數。
vApplicationSVCHook
vApplicationSVCHook僅在帶有SVC異常處理的平臺上可用,如ARM Cortex-M7。該鉤子函數在SVC處理程序中調用。它提供了一種擴展或修改基于SVC的系統調用行為的方法,如讓出CPU、進入/退出臨界區或啟動第一個任務。函數功能通過向SVC處理程序提供的數字參數選擇。如果數字與內核的預定義功能不匹配,系統將調用vApplicationSVCHook函數。
通過在應用程序中使用鉤子函數,用戶可以對RTOS進行更深入的控制:
更有效地處理系統錯誤,確保系統安全恢復。
定制任務行為和管理系統滴答設置。
實現低功耗模式,使用空閑任務執行后臺操作。
鉤子函數是SAFERTOS和其他RTOS實現的一個關鍵特性,通過允許應用程序開發人員將自定義行為注入內核生命周期的各個部分,提供了靈活性。這種自定義確保系統按照特定應用程序的要求運行,例如處理錯誤、管理任務或響應中斷。通過使用鉤子函數,可以在不修改RTOS核心代碼的情況下調整系統行為,從而提高應用程序的可靠性和效率。
麥克泰技術是安全預認證操作系統SAFERTOS在中國的代理商,具有超過20年嵌入式實時操作系統和功能安全軟件服務的市場、服務和培訓經驗,聯系info@bmrtech.com。
-
內核
+關注
關注
3文章
1406瀏覽量
41045 -
函數
+關注
關注
3文章
4367瀏覽量
64041 -
RTOS
+關注
關注
24文章
838瀏覽量
120684
原文標題:RTOS中的Hook函數
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論