空閑任務(wù)鉤子函數(shù)詳解
1、鉤子函數(shù)
FreeRTOS中有多個(gè)鉤子函數(shù),鉤子函數(shù)類似回調(diào)函數(shù),當(dāng)某個(gè)功能(函數(shù))執(zhí)行的時(shí)候就會(huì)調(diào)用鉤子函數(shù),至于鉤子函數(shù)的具體內(nèi)容那就由用戶來編寫。如果不需要使用鉤子函數(shù)的話就什么也不用管,鉤子函數(shù)是一個(gè)可選功能,可以通過宏定義來選擇使用哪個(gè)鉤子函數(shù),可選的鉤子函數(shù)如表所示:
鉤子函數(shù)的使用方法基本相同,用戶使能相應(yīng)的鉤子函數(shù),然后自行根據(jù)實(shí)際需求編寫鉤子函數(shù)的內(nèi)容,下一節(jié)我們會(huì)以空閑任務(wù)鉤子函數(shù)為例講解如何使用鉤子函數(shù)。
2、空閑任務(wù)鉤子函數(shù)
在每個(gè)空閑任務(wù)運(yùn)行周期都會(huì)調(diào)用空閑任務(wù)鉤子函數(shù),如果想在空閑任務(wù)優(yōu)先級下處理某個(gè)任務(wù)有兩種選擇:
● 在空閑任務(wù)鉤子函數(shù)中處理任務(wù)。
不管什么時(shí)候都要保證系統(tǒng)中至少有一個(gè)任務(wù)可以運(yùn)行,因此絕對不能在空閑任務(wù)鉤子函數(shù)中調(diào)用任何可以阻塞空閑任務(wù)的 API 函數(shù),比如vTaskDelay(),或者其他帶有阻塞時(shí)間的信號量或隊(duì)列操作函數(shù)。
● 創(chuàng)建一個(gè)與空閑任務(wù)優(yōu)先級相同的任務(wù)。
創(chuàng)建一個(gè)任務(wù)是最好的解決方法,但是這種方法會(huì)消耗更多的 RAM。
要使用空閑任務(wù)鉤子函數(shù)首先要在 FreeRTOSConfig.h 中將宏 configUSE_IDLE_HOOK 改為1,然后編寫空閑任務(wù)鉤子函數(shù)vApplicationIdleHook()。通常在空閑任務(wù)鉤子函數(shù)中將處理器設(shè)置為低功耗模式來節(jié)省電能,為了與 FreeRTOS 自帶的 Tickless模式做區(qū)分,這里我暫且將這種低功耗的實(shí)現(xiàn)方法稱之為通用低功耗模式(因?yàn)閹缀跛械?RTOS 系統(tǒng)都可以使用這種方法實(shí)現(xiàn)低功耗)。這種通用低功耗模式和
FreeRTOS 自帶的 Tickless 模式的區(qū)別我們通過下圖來對比分析一下。
圖中有三個(gè)任務(wù),它們分別為一個(gè)空閑任務(wù)(Idle),兩個(gè)用戶任務(wù)(Task1 和Task2),其中空閑任務(wù)一共有運(yùn)行了三次,分別為(1)、(2)、(3),其中 T1 到 T12 是 12 個(gè)時(shí)刻
-
嵌入式
+關(guān)注
關(guān)注
5090文章
19176瀏覽量
306892 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4345瀏覽量
62874 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62327
發(fā)布評論請先 登錄
相關(guān)推薦
評論