在FreeRTOS中排查任务栈溢出,建议三步走:1) 开启configCHECK_FOR_STACK_OVERFLOW=2,并实现vApplicationStackOverflowHook,在钩子中打印任务名和当前栈指针,快速定位溢出任务。2) 启用高水位标记:在任务创建时用xTaskCreate,并调用uxTaskGetStackHighWaterMark(NULL)获取当前任务剩余最小栈空间(单位字)。若返回值小于10,说明栈余量不足,需增大usStackDepth。3) 实战排查:在任务主循环中周期性打印高水位值,观察是否持续下降;若下降,检查局部大数组、递归调用、printf/sprintf等重栈函数。注意:高水位值只在任务运行时更新,建议在任务稳定运行后读取。若使用vTaskList,需开启configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS。最终根据高水位值预留20%-30%余量,重新编译验证。
mcuku 阿沐 · 2026-09-28