1

我正在尝试使用 FreeRTOS 在 ATMega323_WinAVR 上实现生产者-消费者算法。调试时我在 AVR Studio 4 中收到此错误:

AVR Simulator: Excessive stack overflow, stop sim

堆栈指针停在这一行:

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

为什么会出现这个错误?

谢谢!

4

2 回答 2

1

当你构建一个程序时,链接器定义了堆栈在 RAM 中的位置,而调试器将期望在那里找到它。当您运行 FreeRTOS 调度程序时,堆栈将来自 FreeRTOS 堆,因为每个任务在创建时都会分配一个堆栈。调试器将无法知道任务是否溢出其堆栈,因为它不知道堆栈在哪里,也不知道 FreeRTOS。

我建议在调试器中关闭该检查,然后在 FreeRTOS 中打开堆栈检查(如果您想检查堆栈溢出,仅在开发期间推荐)。

问候。

于 2011-11-18T10:30:17.540 回答
0

看看这个线程。模拟器的堆栈观察器可能存在问题。

于 2011-11-18T09:59:21.320 回答