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