這個(gè)是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里
V3:HAL庫(kù)開(kāi)發(fā)、手把手教學(xué)下面功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、openmv視覺(jué)控制、電磁循跡、FreeRTOS、K210視覺(jué)智能車(更新中)、K230視覺(jué)智能車(更新中)、MSPM0G3507視覺(jué)智能車(更新中)
22.3.2-任務(wù)棧 和 系統(tǒng)可用堆 上手編程
復(fù)制一下22-2_LED_FreeRTOS 的代碼,重新命名22-3_LED_FreeRTOS
打開(kāi)LED.ioc
打開(kāi)uxTaskGetStackHighWaterMark 使能
默認(rèn)任務(wù)中增加獲取任務(wù)高水位值和系統(tǒng)可用堆空間代碼,時(shí)間改成10ms
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 獲取當(dāng)前任務(wù)的棧高水位值
printf("StartDefaultTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 獲取系統(tǒng)的可用堆空間
printf("StartDefaultTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 獲取當(dāng)前任務(wù)的棧高水位值
printf("StartLedTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 獲取系統(tǒng)的可用堆空間
printf("StartLedTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 獲取當(dāng)前任務(wù)的棧高水位值
printf("StartOledTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 獲取系統(tǒng)的可用堆空間
printf("StartOledTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
然后編譯->燒錄到開(kāi)發(fā)板里面
因?yàn)槲覀兪褂胮rintf是串口一輸出信息,所以我們使用DAP連接底板的串口一,具體教程在(如果不會(huì)接線和使用可以具體看前面的視頻):第四章-串口實(shí)驗(yàn)(簡(jiǎn)單輸出)->4.2串口實(shí)驗(yàn)->接線圖->使用dap
然后打開(kāi)串口軟件
可以看到 每個(gè)任務(wù)的任務(wù)的棧高水位值(如果這個(gè)值過(guò)小,就要提高所在任務(wù)棧大小)
還有系統(tǒng)的可用堆空間,如果這個(gè)值過(guò)小就要提高TOTAL_HEAP_SIZE 系統(tǒng)可用堆大小
在下面這個(gè)位置提高系統(tǒng)可用堆大小