FreeRTOS 任务优先级分配方案
任務優(yōu)先級說明
下面對 FreeRTOS 優(yōu)先級相關的幾個重要知識點進行下說明,這些知識點在以后的使用中務必要掌握牢固。
? FreeRTOS 中任務的最高優(yōu)先級是通過 FreeRTOSConfig.h 文件中的 configMAX_PRIORITIES 進行
配置的,用戶實際可以使用的優(yōu)先級范圍是 0 到 configMAX_PRIORITIES – 1。比如我們配置此宏定
義為 5,那么用戶可以使用的優(yōu)先級號是 0,1,2,3,4,不包含 5,對于這一點,初學者要特別的注意。
? 用戶配置任務的優(yōu)先級數(shù)值越小,那么此任務的優(yōu)先級越低,空閑任務的優(yōu)先級是 0。
? 建議用戶配置宏定義 configMAX_PRIORITIES 的最大值不要超過 32,即用戶任務可以使用的優(yōu)先級
范圍是0到31。因為對于CM內(nèi)核的移植文件,用戶任務的優(yōu)先級不是大于等于32的話, portmacro.h
文件中的宏定義configUSE_PORT_OPTIMISED_TASK_SELECTION會優(yōu)化優(yōu)先級列表中要執(zhí)行的最
高優(yōu)先級任務的獲取算法(對于 CM 內(nèi)核的移植文件,此宏定義默認是使能的,當然,用戶也可以在
FreeRTOSConfig.h 文件中進行配置)。 相比通用的最高優(yōu)先級任務獲取算法,這兩種方式的對比如
下:
? 通用方式,沒有優(yōu)化---配置宏定義 configUSE_PORT_OPTIMISED_TASK_SELECTION 為 0:
? 所有平臺的移植文件都可以配置為 0,因為這是通用方式。
? 純 C 編寫,比專用方式效率低。
? 可用的優(yōu)先級數(shù)量不限制。
? 專用方式,進行優(yōu)化---配置宏定義 configUSE_PORT_OPTIMISED_TASK_SELECTION 為為 1:
? 部分平臺支持。
? 這些平臺架構有專用的匯編指令,比如 CLZ(Count Leading Zeros)指令,通過這些指令可以加速算法執(zhí)行速度。
? 比通用方式高效。
? 有最大優(yōu)先級數(shù)限制,通常限制為 32 個。
? 如果用戶在 FreeRTOSConfig.h 文件中配置宏定義 configUSE_TIME_SLICING 為 1,或者沒有配置
此宏定義,時間片調度都是使能的。 另外,只要芯片資源允許,可以配置任意多個同優(yōu)先級任務。
(備注:沒有定義 configUSE_TIME_SLICING,也能使用時間片調度是因為此宏定義默認已經(jīng)在
FreeRTOS.h 文件中使能)
? FreeRTOS 中處于運行狀態(tài)的任務永遠是當前能夠運行的最高優(yōu)先級任務。 下一章節(jié)講解調度器,大
家會對這個知識點有一個全面的認識。
任務優(yōu)先級分配方案
對于初學者,有時候會糾結任務優(yōu)先級設置為多少合適,因為任務優(yōu)先級設置多少是沒有標準的。對
于這個問題,我們這里為大家推薦一個標準,任務優(yōu)先級設置推薦方式如下圖 13.1 所示:
?
? IRQ 任務:IRQ 任務是指通過中斷服務程序進行觸發(fā)的任務,此類任務應該設置為所有任務里面優(yōu)先級最高的。
? 高優(yōu)先級后臺任務:比如按鍵檢測,觸摸檢測,USB 消息處理,串口消息處理等,都可以歸為這一類任務。
? 低優(yōu)先級的時間片調度任務:比如 emWin 的界面顯示,LED 數(shù)碼管的顯示等不需要實時執(zhí)行的都可以歸為這一類任務。 實際應用中用戶不必拘泥于將這些任務都設置為優(yōu)先級 1 的同優(yōu)先級任務,可以設置多個優(yōu)先級,只需注意這類任務不需要高實時性。
? 空閑任務:空閑任務是系統(tǒng)任務。
? 特別注意:IRQ 任務和高優(yōu)先級任務必須設置為阻塞式(調用消息等待或者延遲等函數(shù)即可),只有
這樣,高優(yōu)先級任務才會釋放 CPU 的使用權,,從而低優(yōu)先級任務才有機會得到執(zhí)行。
這里的優(yōu)先級分配方案是我們推薦的一種方式,實際項目也可以不采用這種方法。 調試出適合項目需求的才是最好的。?
中斷優(yōu)先級和任務優(yōu)先級區(qū)別
部分初學者也容易在這兩個概念上面出現(xiàn)問題。 簡單的說,這兩個之間沒有任何關系,不管中斷的優(yōu)
先級是多少,中斷的優(yōu)先級永遠高于任何任務的優(yōu)先級,即任務在執(zhí)行的過程中,中斷來了就開始執(zhí)行中
斷服務程序。
另外對于 STM32F103,F407 和 F429 來說,中斷優(yōu)先級的數(shù)值越小,優(yōu)先級越高。 而 FreeRTOS
的任務優(yōu)先級是,任務優(yōu)先級數(shù)值越小,任務優(yōu)先級越低。
?
總結
以上是生活随笔為你收集整理的FreeRTOS 任务优先级分配方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做一个”合格“的程序员(二)——学习管理
- 下一篇: Wireshark抓取RTP包,还原语音