与avr-gdb一起使用simulavr时抛出奇怪的异常

时间:2013-08-25 17:31:32

标签: c debugging gdb avr avr-gcc

我正在调试我为AVR架构编写的程序,并使用带有avr-gcc参数的-g进行编译。

我使用以下命令启动simulavrsimulavr --device atmega8 --gdbserver

然后我调用avr-gdb并执行(gdb) file main.elf以及(gdb) target remote localhost:1212

调试开始后,我可以通过程序step等的汇编部分.init成功完成。但是,执行jmp main并调用另一个函数后,simulavr会抛出以下异常:Assertion failed: (m_on_call_sp != 0x0000), function OnCall, file hwstack.cpp, line 266. Abort trap: 6

它与将帧推入堆栈有关,但我无法完全理解如何修复它。

1 个答案:

答案 0 :(得分:1)

这个堆栈值远非应有的值。在程序开始时,它应该接近RAM的末尾,而不是在开始时。

simulavr没有为您的设备正确配置RAM可能会出现问题。快速查看源代码显示,如果模拟器无法确定正确的值,则堆栈指针设置为0.

编译时是否在命令行中包含-mmcu = atmega8?尝试将-V开关添加到simulavr命令以获取更多线索。