空閑任務(wù)是 FreeRTOS 必不可少的一個(gè)任務(wù),其他 RTOS 類系統(tǒng)也有空閑任務(wù),比如 uC/OS??疵志椭?,空閑任務(wù)是處理器空閑的時(shí)候去運(yùn)行的一個(gè)任務(wù),當(dāng)系統(tǒng)中沒有其他就緒任務(wù)的時(shí)候空閑任務(wù)就會(huì)開始運(yùn)行,空閑任務(wù)最重要的作用就是讓處理器在無事可做的時(shí)候找點(diǎn)事做,防止處理器無聊,因此,空閑任務(wù)的優(yōu)先級(jí)肯定是最低的。當(dāng)然了,實(shí)際上肯定不會(huì)這么浪費(fèi)寶貴的處理器資源,F(xiàn)reeRTOS 空閑任務(wù)中也會(huì)執(zhí)行一些其他的處理。
空閑任務(wù)詳解
1、空閑任務(wù)簡(jiǎn)介
當(dāng) FreeRTOS 的調(diào)度器啟動(dòng)以后就會(huì)自動(dòng)的創(chuàng)建一個(gè)空閑任務(wù),這樣就可以確保至少有一任務(wù)可以運(yùn)行。但是這個(gè)空閑任務(wù)使用最低優(yōu)先級(jí),如果應(yīng)用中有其他高優(yōu)先級(jí)任務(wù)處于就緒態(tài)的話這個(gè)空閑任務(wù)就不會(huì)跟高優(yōu)先級(jí)的任務(wù)搶占 CPU 資源。空閑任務(wù)還有另外一個(gè)重要的職責(zé),如果某個(gè)任務(wù)要調(diào)用函數(shù) vTaskDelete()刪除自身,那么這個(gè)任務(wù)的任務(wù)控制塊 TCB 和任務(wù)堆棧等這些由 FreeRTOS 系統(tǒng)自動(dòng)分配的內(nèi)存需要在空閑任務(wù)中釋放掉,如果刪除的是別的任務(wù)那么相應(yīng)的內(nèi)存就會(huì)被直接釋放掉,不需要在空閑任務(wù)中釋放。因此,一定要給空閑任務(wù)執(zhí)行的機(jī)會(huì)!除此以外空閑任務(wù)就沒有什么特別重要的功能了,所以可以根據(jù)實(shí)際情況減少空閑任務(wù)使用 CPU 的時(shí)間(比如,當(dāng) CPU 運(yùn)行空閑任務(wù)的時(shí)候使處理器進(jìn)入低功耗模式)。
用戶可以創(chuàng)建與空閑任務(wù)優(yōu)先級(jí)相同的應(yīng)用任務(wù),當(dāng)宏 configIDLE_SHOULD_YIELD 為 1的話應(yīng)用任務(wù)就可以使用空閑任務(wù)的時(shí)間片,也就是說空閑任務(wù)會(huì)讓出時(shí)間片給同優(yōu)先級(jí)的應(yīng)用任務(wù)。這種機(jī)制要求FreeRTOS 使用搶占式內(nèi)核。
2、空閑任務(wù)的創(chuàng)建
當(dāng)調(diào)用函數(shù) vTaskStartScheduler()啟動(dòng)任務(wù)調(diào)度器的時(shí)候此函數(shù)就會(huì)自動(dòng)創(chuàng)建空閑任務(wù)。
3、空閑任務(wù)函數(shù)
空閑任務(wù)的任務(wù)函數(shù)為 prvIdleTask(),但是實(shí)際上是找不到這個(gè)函數(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)注
5095文章
19189瀏覽量
307974 -
RTOS
+關(guān)注
關(guān)注
22文章
820瀏覽量
119914 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62414
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FreeRTOS中的任務(wù)管理
轉(zhuǎn):第10章 FreeRTOS任務(wù)管理
Zynq中使用FreeRTOS的空閑鉤子函數(shù)時(shí)在SDK中的設(shè)置
![Zynq中使用<b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>空閑</b>鉤子函數(shù)時(shí)在SDK<b class='flag-5'>中</b>的設(shè)置](https://file1.elecfans.com//web2/M00/A6/B1/wKgZomUMP7aATofuAAAdLaqIvLU908.png)
FreeRTOS任務(wù)如何創(chuàng)建和刪除?
(一)FreeRTOS學(xué)習(xí)之FreeRTOS任務(wù)基礎(chǔ)知識(shí)
![(一)<b class='flag-5'>FreeRTOS</b>學(xué)習(xí)之<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>基礎(chǔ)知識(shí)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FreeRTOS高級(jí)篇11---空閑任務(wù)分析
![<b class='flag-5'>FreeRTOS</b>高級(jí)篇11---<b class='flag-5'>空閑</b><b class='flag-5'>任務(wù)</b>分析](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FreeRTOS高級(jí)篇2---FreeRTOS任務(wù)創(chuàng)建分析
![<b class='flag-5'>FreeRTOS</b>高級(jí)篇2---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>創(chuàng)建分析](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FreeRTOS系列第11篇---FreeRTOS任務(wù)控制
![<b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>控制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FreeRTOS系列第10篇---FreeRTOS任務(wù)創(chuàng)建和刪除
![<b class='flag-5'>FreeRTOS</b>系列第10篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>創(chuàng)建和刪除](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
freeRTOS中空閑任務(wù)的作用
![<b class='flag-5'>freeRTOS</b>中<b class='flag-5'>空閑</b><b class='flag-5'>任務(wù)</b>的作用](https://file1.elecfans.com/web2/M00/8B/FC/wKgZomSjxu2Afjr-AACIkKZHklg145.jpg)
評(píng)論