我正在调试一个为AVR体系结构编写并使用avr-gcc-g参数编译的程序。
我使用以下命令启动simulavrsimulavr --device atmega8 --gdbserver
然后我调用avr-gdb并执行(gdb) file main.elf(gdb) target remote localhost:1212
一旦调试开始,我就可以成功地通过程序的汇编部分。但是,一旦执行step并调用另一个函数,.init将引发以下异常:jmp main
这和把一个框架推到堆栈上有关系,但我不能完全确定如何修复它。

最佳答案

堆栈值离它应该的值很远。在程序开始时,它应该在RAM的末尾,而不是在开始时。
很可能是simulavr没有为您的设备正确配置RAM的问题。快速查找源代码可以发现,如果模拟器无法确定正确的值,堆栈指针将设置为0。
编译时是否在命令行中包含-mmcu=atmega8?尝试在simulavr命令中添加-V开关以获取更多线索。

08-26 14:56