FreeRTOS再學習——1st——任務狀態以及互相轉換

FreeRTOS中的任務狀態永遠處於下面幾個狀態中的某一個:
●運行態
當一個任務正在運行時,那麼就說這個任務處於運行態,處於運行態的任務就是當前正在使用處理器的任務。如果使用的是單核處理器的話那麼不管在任何時刻永遠都只有一個任務處於運行態。
●就緒態
處於就緒態的任務是那些已經準備就緒(這些任務沒有被阻塞或者掛起),可以運行的任務,但是處於就緒態的任務還沒有運行,因爲有一個同優先級或者更高優先級的任務正在運行!
●阻塞態
如果-一個任務當前正在等待某個外部事件的話就說它處於阻塞態,比如說如果某個任務調用了函vTaskDelay(的話就會進入阻塞態,直到延時週期完成。任務在等待隊列、信號量、事件組、通知或互斥信號量的時候也會進入阻塞態。任務進入阻塞態會有一個超時時間,當超過這個超時時間任務就會退出阻塞態,即使所等待的事件還沒有來臨!
●掛起態
像阻塞態-一樣,任務進入掛起態以後也不能被調度器調用進入運行態,但是進入掛起態的任務沒有超時時間。任務進入和退出掛起態通過調用函數vTaskSuspend()和xTaskResume()。

狀態轉換:
運行態:
*當有更高級的優先級來到時,自動進入就緒態
*通過vTaskSuspend()進入掛起態
*通過阻塞API函數進入阻塞態(消息隊列,郵箱等等)

就緒態:
*當它成爲最高優先級時就如運行態
*通過vTaskSuspend()進入掛起態

阻塞態:
*當事件結束時就如就緒態
*通過vTaskSuspend()進入掛起態

掛起態:
*通過xTaskResume()進入就緒態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章