我正在尝试使用FreeRTOS在ATMega323_WinAVR上实现生产者 - 消费者算法。调试时,我在AVR Studio 4中收到此错误:
AVR Simulator: Excessive stack overflow, stop sim
堆栈指针停在此行:
static void prvCopyDataToQueue (
xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition){
为什么会出现此错误?
谢谢!
答案 0 :(得分:1)
当您构建程序时,链接器定义堆栈将在RAM中的位置,调试器将期望在那里找到它。当您运行FreeRTOS调度程序时,堆栈将来自FreeRTOS堆,因为每个任务在创建时都会分配一个堆栈。调试器无法知道某个任务是否已经溢出其堆栈,因为它不知道堆栈的位置,也不知道FreeRTOS。
我建议关闭调试器中的那个检查,然后在FreeRTOS中打开堆栈检查(如果你想检查堆栈溢出,仅在开发期间推荐)。
问候。
答案 1 :(得分:0)
看看this thread。模拟器的堆栈观察器可能存在问题。