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