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

FreeRTOS任務如何創(chuàng)建和刪除?
(一)FreeRTOS學習之FreeRTOS任務基礎知識

FreeRTOS高級篇11---空閑任務分析

FreeRTOS高級篇2---FreeRTOS任務創(chuàng)建分析

FreeRTOS系列第11篇---FreeRTOS任務控制

FreeRTOS系列第10篇---FreeRTOS任務創(chuàng)建和刪除

評論