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