這個是全網(wǎng)最詳細的STM32項目教學視頻。
第一篇在這里:
視頻在這里
V3:HAL庫開發(fā)、手把手教學下面功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、openmv視覺控制、電磁循跡、FreeRTOS、K210視覺智能車(更新中)、K230視覺智能車(更新中)、MSPM0G3507視覺智能車(更新中)
22.4-任務優(yōu)先級與中斷優(yōu)先級
前面我們創(chuàng)建任務的時候,需要設置任務的優(yōu)先級,那么任務的優(yōu)先級是什么意思? 和中斷優(yōu)先級有什么區(qū)別那?我們新建多個任務時候又應該如何確定任務的優(yōu)先級那?
22.4.1-任務優(yōu)先級相關(guān)
任務優(yōu)先級概念(了解)
任務優(yōu)先級決定了哪個任務先執(zhí)行,哪個任務后執(zhí)行。當系統(tǒng)中有多個任務需要運行時,F(xiàn)reeRTOS 會根據(jù)任務優(yōu)先級來決定哪一個任務獲得 CPU 時間片。
- 高優(yōu)先級任務 會搶占低優(yōu)先級任務。
- 每個任務可以設置一個優(yōu)先級,優(yōu)先級的值越大,任務的優(yōu)先級越高。
任務優(yōu)先級設置和最高優(yōu)先級設置(了解)
任務優(yōu)先級設置
任務優(yōu)先級在每次新建任務可以在NewTask的Priority中設置優(yōu)先級
如果自己寫代碼新建任務可以在 xTaskCreate
函數(shù)中的 uxPriority
參數(shù)設置的。
xTaskCreate(TaskFunction, "TaskName", STACK_SIZE, NULL, PRIORITY, NULL);
任務優(yōu)先級的動態(tài)調(diào)整
FreeRTOS 提供了調(diào)整任務優(yōu)先級的 API,如 vTaskPrioritySet()
,可以動態(tài)改變?nèi)蝿盏膬?yōu)先級。例如,某些情況下,任務的優(yōu)先級可能需要在運行時進行調(diào)整。
vTaskPrioritySet(taskHandle, newPriority);//taskHandle:任務句柄、newPriority:新的要設置的優(yōu)先級
任務最高優(yōu)先級設置
FreeRTOS 的優(yōu)先級是一個 無符號整數(shù),通常是從 0
(最低優(yōu)先級)到 configMAX_PRIORITIES-1
(最高優(yōu)先級)。
configMAX_PRIORITIES 在STM32Cubemx中設置或者代碼中設置(建議STM32Cbuemx設置然后生成代碼)
一般不用設置太大夠用就可以,比如設置5-7等
任務優(yōu)先級分配分配方案!(重點掌握)
對于初學者,有時候會糾結(jié)任務優(yōu)先級設置為多少合適,因為任務優(yōu)先級設置多少是沒有標準的。對于這個問題,這里為大家推薦一個標準,任務優(yōu)先級設置推薦方式如下圖:
- IRQ 任務:IRQ 任務是指通過中斷服務程序進行觸發(fā)的任務,此類任務應該設置為所有任務里面優(yōu)先級最高的。比如中斷觸發(fā)的數(shù)據(jù)處理解析、中斷觸發(fā)的報警和急停等任務。
- 高優(yōu)先級后臺任務:比如按鍵檢測,觸摸檢測,USB 消息處理,串口消息處理等,都可以歸為這一類任務。
- 低優(yōu)先級的時間片調(diào)度任務:比如 emWin 的界面顯示,LED 數(shù)碼管的顯示等不需要實時執(zhí)行的都可以歸為這一類任務。實際應用中用戶不必拘泥于將這些任務都設置為優(yōu)先級 1 的同優(yōu)先級任務,可以設置多個優(yōu)先級,只需注意這類任務不需要高實時性。
- 空閑任務:空閑任務是系統(tǒng)任務。
- 特別注意:IRQ 任務和高優(yōu)先級任務必須設置為阻塞式(調(diào)用消息等待或者延遲等函數(shù)即可),只有這樣,高優(yōu)先級任務才會釋放 CPU 的使用權(quán),,從而低優(yōu)先級任務才有機會得到執(zhí)行。
這里可以增加后面所做任務優(yōu)先級的計劃,和為什么那么做?
這個是已經(jīng)新增任務的優(yōu)先級,默認任務和led任務設置正常優(yōu)先級,OLED刷新任務設置低于正常優(yōu)先級,這就是因為:OLED的刷新并不需要實時執(zhí)行,所以設置低一些。
后面章節(jié)我們會新增一些任務這里寫出對他們優(yōu)先級的設置規(guī)劃
最高優(yōu)先級是電機停止任務,因為這個任務我們是等待按鍵中斷的二值信號量的屬于IRQ 任務(通過中斷服務程序進行觸發(fā)的任務)
其次是123456就是用來完成裸機時候的1和2和3和4和5和6模式的任務。
再然后是LED閃爍任務
最后是OLED刷新任務,OLED刷新和LED燈閃爍都是屬于提示顯示任務設置比較低的優(yōu)先級就可以