我正在调试我为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
它与将帧推入堆栈有关,但我无法完全理解如何修复它。
答案 0 :(得分:1)
这个堆栈值远非应有的值。在程序开始时,它应该接近RAM的末尾,而不是在开始时。
simulavr没有为您的设备正确配置RAM可能会出现问题。快速查看源代码显示,如果模拟器无法确定正确的值,则堆栈指针设置为0.
编译时是否在命令行中包含-mmcu = atmega8?尝试将-V开关添加到simulavr命令以获取更多线索。