这个是全网最详细的STM32项目教学视频。
第一篇在这里:
视频在这里
V3:HAL库开发、手把手教学下面功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、openmv视觉控制、电磁循迹、FreeRTOS、K210视觉智能车(更新中)、K230视觉智能车(更新中)、MSPM0G3507视觉智能车(更新中)
22.3.2-任务栈 和 系统可用堆 上手编程
复制一下22-2_LED_FreeRTOS 的代码,重新命名22-3_LED_FreeRTOS
打开LED.ioc
打开uxTaskGetStackHighWaterMark 使能
默认任务中增加获取任务高水位值和系统可用堆空间代码,时间改成10ms
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 获取当前任务的栈高水位值
printf("StartDefaultTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 获取系统的可用堆空间
printf("StartDefaultTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 获取当前任务的栈高水位值
printf("StartLedTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 获取系统的可用堆空间
printf("StartLedTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
UBaseType_t stackHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 获取当前任务的栈高水位值
printf("StartOledTask Mark: %u wordsn", (unsigned int)stackHighWaterMark);
size_t freeHeapSize = xPortGetFreeHeapSize();// 获取系统的可用堆空间
printf("StartOledTask Free Heap Size: %u bytesn", (unsigned int)freeHeapSize);
然后编译->烧录到开发板里面
因为我们使用printf是串口一输出信息,所以我们使用DAP连接底板的串口一,具体教程在(如果不会接线和使用可以具体看前面的视频):第四章-串口实验(简单输出)->4.2串口实验->接线图->使用dap
然后打开串口软件
可以看到 每个任务的任务的栈高水位值(如果这个值过小,就要提高所在任务栈大小)
还有系统的可用堆空间,如果这个值过小就要提高TOTAL_HEAP_SIZE 系统可用堆大小
在下面这个位置提高系统可用堆大小