參考:《Freertos說明書》、 《嵌入式實時操作系統的多線程計算》
目錄
- 多任務系統
- 任務狀態
- 任務優先級
- 任務控制塊
- 任務切換
- 任務設計原則
1. 多任務系統
多任務系統利用任務調度器實現多個任務的輪番執行,由於每個任務執行的時間比較短,看起來像同一時刻執行了多個任務。
RTOS,任何時間點只能有一個任務運行。具體運行哪個任務,由RTOS任務調度器決定。
RTOS任務調度器需要確保當前任務開始執行時,其上下文與任務退出時一致。
任務特性:支持搶佔、優先級設置,每個任務擁有自己的堆棧。
2. 任務狀態
運行態
- 正在運行的任務。
就緒態
- 處於準備就緒,可以運行但沒有運行的任務。
阻塞態
- 正在等待某個外部事件的任務。如等待隊列、信號量、事件組、通知、互斥信號量、延時。
- 任務進入阻塞態,會有一個超時時間。當超過這個時間,即使未等到事件,也會退出阻塞狀態。
- 被阻塞的任務,不能被調度器調用進入運行態。
掛起態
- 被掛起的任務。被掛起的任務,不能被調度器調用進入運行態。
- 被掛起的任務沒有超時機制,任務進入掛起狀態,調用函數vTaskSuspend();退出掛起狀態,調用函數vTaskResume()。
3. 任務優先級
每個任務都可以配置一個0~configMAX_PRIORITIES -1的優先級。數字越小,優先級越低。
configMAX_PRIORITIES:該參數可以自定義。
- 考慮到RAM的消耗,該參數最好設置爲一個滿足應用的最小值。(????沒明白,task RAM的消耗不是跟task的數量有關嗎,爲什麼跟這個參數有關??)
- 若該參數設置爲1,所以任務擁有相同的優先級。處於就緒狀態的任務輪轉獲取處理器的運行時間。
4. 任務控制塊
任務的信息保存在任務控制塊中。以下是任務控制塊中域的一些簡要說明:
5. 任務切換
RTOS系統的核心是任務管理,任務管理的核心是任務切換,任務切換決定了任務執行順序,切換效率的高低,也決定了系統的性能。
6. 任務設計原則
程序設計時,爲了得到更好的性能和最小化目標代碼,程序員應該遵守以下原則:
(1)最小化任務數目
- 任務的數目會顯著影響系統的開銷,如任務切換需要花費時間,任務的堆棧消耗內存空間等。
(2)最小化優先級數目
(3)謹慎設置任務優先級
- 錯誤地設置優先級可能導致任務餓死、優先級倒置、程序的行爲難以理解等問題。所以,設置任務優先級要慎重。
(4)等等。。。。。。。。