1

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

simulavr使用以下命令启动:simulavr --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

它与将框架推送到堆栈有关,但我不能完全确定如何修复它。

4

1 回答 1

1

该堆栈值与应有的值相差甚远。在您的程序开始时,它应该在 RAM 的末尾附近,而不是在开头。

simulavr 没有为您的设备正确配置 RAM 可能是一些问题。快速查看源代码表明,如果模拟器无法确定正确的值,堆栈指针将设置为 0。

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

于 2013-08-26T08:38:07.057 回答