空閑任務是 FreeRTOS 必不可少的一個任務,其他 RTOS 類系統也有空閑任務,比如 uC/OS。看名字就知道,空閑任務是處理器空閑的時候去運行的一個任務,當系統中沒有其他就緒任務的時候空閑任務就會開始運行,空閑任務最重要的作用就是讓處理器在無事可做的時候找點事做,防止處理器無聊,因此,空閑任務的優先級肯定是最低的。當然了,實際上肯定不會這么浪費寶貴的處理器資源,FreeRTOS 空閑任務中也會執行一些其他的處理。
空閑任務詳解
1、空閑任務簡介
當 FreeRTOS 的調度器啟動以后就會自動的創建一個空閑任務,這樣就可以確保至少有一任務可以運行。但是這個空閑任務使用最低優先級,如果應用中有其他高優先級任務處于就緒態的話這個空閑任務就不會跟高優先級的任務搶占 CPU 資源??臻e任務還有另外一個重要的職責,如果某個任務要調用函數 vTaskDelete()刪除自身,那么這個任務的任務控制塊 TCB 和任務堆棧等這些由 FreeRTOS 系統自動分配的內存需要在空閑任務中釋放掉,如果刪除的是別的任務那么相應的內存就會被直接釋放掉,不需要在空閑任務中釋放。因此,一定要給空閑任務執行的機會!除此以外空閑任務就沒有什么特別重要的功能了,所以可以根據實際情況減少空閑任務使用 CPU 的時間(比如,當 CPU 運行空閑任務的時候使處理器進入低功耗模式)。
用戶可以創建與空閑任務優先級相同的應用任務,當宏 configIDLE_SHOULD_YIELD 為 1的話應用任務就可以使用空閑任務的時間片,也就是說空閑任務會讓出時間片給同優先級的應用任務。這種機制要求FreeRTOS 使用搶占式內核。
2、空閑任務的創建
當調用函數 vTaskStartScheduler()啟動任務調度器的時候此函數就會自動創建空閑任務。
3、空閑任務函數
空閑任務的任務函數為 prvIdleTask(),但是實際上是找不到這個函數的,因為它是通過宏定義來實現的,在文件 portmacro.h 中有如下宏定義:
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
其中 portTASK_FUNCTION()在文件 tasks.c 中有定義,它就是空閑任務的任務函數。
-
嵌入式
+關注
關注
5068文章
19019瀏覽量
303292 -
RTOS
+關注
關注
21文章
809瀏覽量
119433 -
FreeRTOS
+關注
關注
12文章
483瀏覽量
62010
發布評論請先 登錄
相關推薦
評論