2011-11-15 78 views
1

我试图用FreeRTOS在ATMega323_WinAVR上实现生产者 - 消费者算法。我在AVR Studio中4调试时出现此错误:FreeRTOS过度堆栈溢出

AVR Simulator: Excessive stack overflow, stop sim

堆栈指针停止在这一行:

static void prvCopyDataToQueue (
    xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition){ 

为什么会出现这个错误?

谢谢!

回答

1

当你建立一个程序时,链接器定义了栈中RAM的位置,调试器会在那里找到它。当FreeRTOS调度程序运行时,堆栈将来自FreeRTOS堆,因为每个任务在创建时都会分配一个堆栈。调试器无法知道任务是否溢出了堆栈,因为它不知道堆栈的位置,也不知道FreeRTOS。我建议关掉调试器中的检​​查,然后在FreeRTOS中检查堆栈(如果你想检查堆栈溢出,只在开发时推荐)。

问候。

0

看一看this thread。模拟器的堆栈观察器可能存在问题。