任務(wù)狀態(tài)
FreeRTOS 中的任務(wù)永遠(yuǎn)處于下面幾個(gè)狀態(tài)中的某一個(gè):
● 運(yùn)行態(tài)
當(dāng)一個(gè)任務(wù)正在運(yùn)行時(shí),那么就說(shuō)這個(gè)任務(wù)處于運(yùn)行態(tài),處于運(yùn)行態(tài)的任務(wù)就是當(dāng)前正在使用處理器的任務(wù)。如果使用的是單核處理器的話那么不管在任何時(shí)刻永遠(yuǎn)都只有一個(gè)任務(wù)處于運(yùn)行態(tài)。
● 就緒態(tài)
處于就緒態(tài)的任務(wù)是那些已經(jīng)準(zhǔn)備就緒(這些任務(wù)沒(méi)有被阻塞或者掛起),可以運(yùn)行的任務(wù),但是處于就緒態(tài)的任務(wù)還沒(méi)有運(yùn)行,因?yàn)橛幸粋€(gè)同優(yōu)先級(jí)或者更高優(yōu)先級(jí)的任務(wù)正在運(yùn)行!
● 阻塞態(tài)
如果一個(gè)任務(wù)當(dāng)前正在等待某個(gè)外部事件的話就說(shuō)它處于阻塞態(tài),比如說(shuō)如果某個(gè)任務(wù)調(diào)用了函數(shù)
vTaskDelay()的話就會(huì)進(jìn)入阻塞態(tài),直到延時(shí)周期完成。任務(wù)在等待隊(duì)列、信號(hào)量、事件組、通知或互斥信號(hào)量的時(shí)候也會(huì)進(jìn)入阻塞態(tài)。任務(wù)進(jìn)入阻塞態(tài)會(huì)有一個(gè)超時(shí)時(shí)間,當(dāng)超過(guò)這個(gè)超時(shí)時(shí)間任務(wù)就會(huì)退出阻塞態(tài),即使所等待的事件還沒(méi)有來(lái)臨!
● 掛起態(tài)
像阻塞態(tài)一樣,任務(wù)進(jìn)入掛起態(tài)以后也不能被調(diào)度器調(diào)用進(jìn)入運(yùn)行態(tài),但是進(jìn)入掛起態(tài)的任務(wù)沒(méi)有超時(shí)時(shí)間。任務(wù)進(jìn)入和退出掛起態(tài)通過(guò)調(diào)用函數(shù)vTaskSuspend()和 xTaskResume()。任務(wù)狀態(tài)之間的轉(zhuǎn)換如圖所示:
4、任務(wù)優(yōu)先級(jí)
每 個(gè) 任 務(wù) 都 可 以 分 配 一 個(gè) 從 0~(configMAX_PRIORITIES-1) 的 優(yōu) 先 級(jí)
,configMAX_PRIORITIES 在文件 FreeRTOSConfig.h 中有定義,一般不超過(guò) 32。
優(yōu)先級(jí)數(shù)字越低表示任務(wù)的優(yōu)先級(jí)越低,0 的優(yōu)先級(jí)最低,configMAX_PRIORITIES-1 的優(yōu)先級(jí)最高??臻e任務(wù)的優(yōu)先級(jí)最低,為0。(注意和中斷的優(yōu)先級(jí)區(qū)分,任務(wù)和中斷不一樣,中斷一般是數(shù)字越小優(yōu)先級(jí)越大)
當(dāng)宏 configUSE_TIME_SLICING 定義為 1 的時(shí)候多個(gè)任務(wù)可以共用一個(gè)優(yōu)先級(jí),數(shù)量不限。
-
嵌入式
+關(guān)注
關(guān)注
5052文章
18915瀏覽量
300853 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4262瀏覽量
62233 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
483瀏覽量
61858 -
任務(wù)
+關(guān)注
關(guān)注
1文章
20瀏覽量
8524
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論