FreeRTOS任務優先順序說明

2022-02-04 16:50:30 字數 2167 閱讀 1225

下面對 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數碼管顯示等不需要實時執行的都可以歸為這一類。...