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