FreeRTOS 入門 - 鉤子函數(shù)

須知

源碼版本:10.1.1
文章來源:http://www.itdecent.cn/p/6c5cfc0a3e9a

鉤子函數(shù)簡介

鉤子函數(shù)是操作系統(tǒng)(FreeRTOS)滿足某些功能的機制,F(xiàn)reeRTOS調(diào)用鉤子函數(shù),但鉤子函數(shù)的實現(xiàn)由開發(fā)者(用戶)完成。
可以將之理解成回調(diào)函數(shù)。
大部分的鉤子函數(shù)都能在“FreeRTOSConfig.h”中通過宏進行剪裁。

FreeRTOS的鉤子函數(shù)

\color{red}{ 空閑任務(wù)的鉤子函數(shù)}
函數(shù)名稱:vApplicationIdleHook()
使用條件:
1 在“FreeRTOSConfig.h”中配置“configUSE_IDLE_HOOK” 為 1(可裁剪)
2 實現(xiàn)函數(shù)“void vApplicationIdleHook()”

\color{red}{ Tick滴答鉤子函數(shù)}
函數(shù)名稱:vApplicationTickHook()
使用條件:
1 在“FreeRTOSConfig.h”中配置“configUSE_TICK_HOOK” 為 1 (可裁剪)
2 實現(xiàn)函數(shù)“void vApplicationTickHook()”

\color{red}{棧溢出鉤子函數(shù)}
函數(shù)名稱: vApplicationStackOverflowHook()
使用條件:
1 在“FreeRTOSConfig.h”中配置“configCHECK_FOR_STACK_OVERFLOW” 為 1 或者 2(可裁剪)
2 實現(xiàn)函數(shù)“void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )”

\color{red}{守護進程鉤子函數(shù)}
函數(shù)名稱:vApplicationDaemonTaskStartupHook()
使用條件:
1 在“FreeRTOSConfig.h”中配置“configUSE_DAEMON_TASK_STARTUP_HOOK” 為 1 ( 可裁剪 )
2 在“FreeRTOSConfig.h”中配置“configUSE_TIMER” 為 1 ( 可裁剪 )[該鉤子函數(shù)在Timer任務(wù)下實現(xiàn),故需使能TIMER功能]
2 實現(xiàn)函數(shù)“void vApplicationDaemonTaskStartupHook()”

FreeRTOS 鉤子函數(shù)對應(yīng)的特點

\color{red}{ 空閑任務(wù)的鉤子函數(shù)}
運行周期:沒有其它任務(wù)時,一直被調(diào)用,調(diào)用周期非常短(可以類比main函數(shù)中的大循環(huán)while(1)一樣)
使用細節(jié):
1 如果沒有其它的任務(wù)優(yōu)先級和空閑任務(wù)相同,那空閑任務(wù)鉤子函數(shù)中不能阻塞或者掛起自身(空閑任務(wù))。
FreeRTOS任何時候都需要有一個任務(wù)在運行,否則可能會造成沒有任務(wù)能夠進入運行態(tài)。
2 如果其它任務(wù)占用的實際比較少,空閑鉤子函數(shù)將占用大量的系統(tǒng)時間片資源,那么用戶可以將一些功能(對時序無要求)在該函數(shù)內(nèi)實現(xiàn)。

\color{red}{Tick滴答鉤子函數(shù)}
運行周期:由“configTICK_RATE_HZ”決定, 一般都設(shè)置為 1MS
使用細節(jié):
1 該函數(shù)在Tick中斷函數(shù)中調(diào)用,所以該函數(shù)的運行時間越短越好,不能加任何delay。
2 該函數(shù)調(diào)用的周期性很強(1MS),一些定時器計數(shù)器(自定義的計數(shù)器)可以在該函數(shù)里面實現(xiàn)

\color{red}{ 棧溢出鉤子函數(shù)}
運行周期:任務(wù)的棧溢出時候
使用細節(jié):
1 并非所有的棧溢出都會觸發(fā)該鉤子函數(shù)。棧溢出可能會把系統(tǒng)棧溢出檢測代碼的數(shù)據(jù)也給破壞掉了,導致棧溢出檢測失效,那鉤子函數(shù)自然無法被調(diào)用咯。
2 參數(shù)可以知道那個任務(wù)的棧溢出

\color{red}{ 守護進程鉤子函數(shù)}
本人還沒使用過該功能,后續(xù)使用過再補充說明吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容