我正在调试一个为AVR体系结构编写并使用avr-gcc
和-g
参数编译的程序。
我使用以下命令启动simulavr
:simulavr --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开关以获取更多线索。