原帖 | 比国王富有 | 2024-09-30 03:29 | 👍2 | 阅读约1
问: 老师,关于freertos某个任务的栈的问题:1、如何调试发现是栈不够的问题,就是看什么就知道栈不够了?2、freertos的栈是否就是从他的堆分配出来的,因为我看了其他的资料说栈不够了,把这个任务的栈改大,然后他说改大栈了之后,freertos的堆可能也不够了要在cubemx里面改大?3、freertos比如任务用了260字节,任务栈改到300字节大小,堆从8k改到80k,但是8k是不是已经够了,8k是8192 字节够了吧。
答(Jack):
1、如何调试发现任务栈不够的问题?
在 FreeRTOS 中,可以通过以下方法检测任务栈是否不足:
启用栈溢出钩子函数:在 FreeRTOSConfig.h 中,将 configCHECK_FOR_STACK_OVERFLOW 宏设置为 1 或 2,并实现 vApplicationStackOverflowHook() 函数。当发生栈溢出时,FreeRTOS 会调用该钩子函数,调用的时候你可以加入一些自定义的内容,方便调试。
监控任务的最小剩余栈空间:使用 uxTaskGetStackHighWaterMark() 函数,该函数返回任务自创建以来的最小剩余栈空间(也称为“水位线”)。通过定期检查该值,可以评估任务的栈是否足够。
相关笔记