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