下面對 freertos 優先順序相關的幾個重要知識點進行下說明,這些知識點在以後的使用中務必要掌握牢固。
freertos 中任務的最高優先順序是通過 freertosconfig.h 檔案中的 configmax_priorities 進行
配置的,使用者實際可以使用的優先順序範圍是 0 到 configmax_priorities – 1。比如我們配置此巨集定
義為 5,那麼使用者可以使用的優先順序號是 0,1,2,3,4,不包含 5,對於這一點,初學者要特別的注意。
使用者配置任務的優先順序數值越小,那麼此任務的優先順序越低,空閒任務的優先順序是 0。
建議使用者配置巨集定義 configmax_priorities 的最大值不要超過 32,即使用者任務可以使用的優先順序
範圍是0到31。因為對於cm核心的移植檔案,使用者任務的優先順序不是大於等於32的話, portmacro.h
檔案中的巨集定義configuse_port_optimised_task_selection會優化優先順序列表中要執行的最
高優先順序任務的獲取演算法(對於 cm 核心的移植檔案,此巨集定義預設是使能的,當然,使用者也可以在
freertosconfig.h 檔案中進行配置)。 相比通用的最高優先順序任務獲取演算法,這兩種方式的對比如
下: 通用方式,沒有優化---配置巨集定義 configuse_port_optimised_task_selection 為 0:
所有平台的移植檔案都可以配置為 0,因為這是通用方式。
純 c 編寫,比專用方式效率低。
可用的優先順序數量不限制。
專用方式,進行優化---配置巨集定義 configuse_port_optimised_task_selection 為為 1:
部分平台支援。
這些平台架構有專用的彙編指令,比如 clz(count leading zeros)指令,通過這些指令可以加速演算法執行速度。
比通用方式高效。
有最大優先級數限制,通常限制為 32 個。
如果使用者在 freertosconfig.h 檔案中配置巨集定義 configuse_time_slicing 為 1,或者沒有配置
此巨集定義,時間片排程都是使能的。 另外,只要晶元資源允許,可以配置任意多個同優先順序任務。
(備註:沒有定義 configuse_time_slicing,也能使用時間片排程是因為此巨集定義預設已經在
freertos.h 檔案中使能)
freertos 中處於執行狀態的任務永遠是當前能夠執行的最高優先順序任務。 下一章節講解排程器,大
家會對這個知識點有乙個全面的認識。
任務優先順序分配方案
對於初學者,有時候會糾結任務優先順序設定為多少合適,因為任務優先順序設定多少是沒有標準的。對
於這個問題,我們這裡為大家推薦乙個標準,任務優先順序設定推薦方式如下圖 13.1 所示:
irq 任務:irq 任務是指通過中斷服務程式進行觸發的任務,此類任務應該設定為所有任務裡面優先順序最高的。
高優先順序後台任務:比如按鍵檢測,觸控檢測,usb 訊息處理,串列埠訊息處理等,都可以歸為這一類任務。
低優先順序的時間片排程任務:比如 emwin 的介面顯示,led 數碼管的顯示等不需要實時執行的都可以歸為這一類任務。 實際應用中使用者不必拘泥於將這些任務都設定為優先順序 1 的同優先順序任務,可以設定多個優先順序,只需注意這類任務不需要高實時性。
空閒任務:空閒任務是系統任務。
特別注意:irq 任務和高優先順序任務必須設定為阻塞式(呼叫訊息等待或者延遲等函式即可),只有
這樣,高優先順序任務才會釋放 cpu 的使用權,,從而低優先順序任務才有機會得到執行。
這裡的優先順序分配方案是我們推薦的一種方式,實際專案也可以不採用這種方法。 除錯出適合專案需求的才是最好的。
中斷優先順序和任務優先順序區別
部分初學者也容易在這兩個概念上面出現問題。 簡單的說,這兩個之間沒有任何關係,不管中斷的優
先級是多少,中斷的優先順序永遠高於任何任務的優先順序,即任務在執行的過程中,中斷來了就開始執行中
斷服務程式。
另外對於 stm32f103,f407 和 f429 來說,中斷優先順序的數值越小,優先順序越高。 而 freertos
的任務優先順序是,任務優先順序數值越小,任務優先順序越低。
FreeRTOS 任務優先順序說明
freertos任務優先順序與unix程序優先順序不同 freertos 任務優先 任務優先順序數值越小,任務優先順序越低。unix 任務優先 程序優先順序數值越小,程序優先順序越高。下面對 freertos 優先順序相關的幾個重要知識點進行下說明,這些知識點在以後的使用中務必要掌握牢固。freer...
FreeRTOS優先順序配置說明
1 中斷優先順序和任務優先順序沒有任何關係,中斷的優先順序高於任何任務的優先順序,即任務在執行的過程中,中斷來了就開始執行中斷服務程式。2 中斷優先順序數值越小,優先順序就越高。freertos的任務優先順序是,任務優先順序數值越小,優先順序越低。1 nvic的全稱是nested vectoredi...
FreeRTOS任務優先順序設計原則
1 irq任務 是指通過中斷服務程式進行觸發的任務。此類任務應該設定為所有任務裡面優先順序最高的。2 高優先順序後台任務 比如按鍵檢測 觸控檢測 usb訊息處理 串列埠訊息處理等可以歸於這一類。3 低優先順序時間片排程任務 比如emwin介面顯示 led數碼管顯示等不需要實時執行的都可以歸為這一類。...