我正在读取dsPIC30F6014A上ADC通道的一些数据。
为此我为每个ADC实现了一个单独的任务(比如7个通道 - 7个任务)
我只在开始时创建了所有任务,我的堆大小是5120,我正在使用heap_4.c并且我为每个任务分配了堆栈configMINIMAL_Stack
(即115)。
这些任务是连续不断地定期运行(仅vTaskSuspend()
和vTaskResume()
正是我正在做的事)
在开始时,所有任务都正常工作但在一段时间vApplicationStackOverflowHook()
发生后,即堆栈溢出。
是否存在错误处理内存的可能性?
答案 0 :(得分:3)
根据ADC输入创建任务似乎很浪费。除了阅读ADC之外还有什么其他的工作?
我猜你的任务非常接近其堆栈的边缘,并且在某些时候,当你处于最大堆栈深度并且导致溢出时,恰好会发生中断。您可以定期调用uxTaskGetStackHighWaterMark()来确定您已达到堆栈末尾的距离。