我正在调试我为 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,文件 hwstack.cpp,第 266 行。中止陷阱:6
这与将帧插入堆栈有关,但我不太清楚如何修复它。
最佳答案
该堆栈值与其应有的值相去甚远。在程序开始时,它应该接近 RAM 的末尾,而不是开始。
这可能是 simulavr 没有为您的设备正确配置 RAM 的一些问题。快速查看源代码表明,如果模拟器无法确定正确的值,堆栈指针将设置为 0。
你在编译时是否在命令行中包含 -mmcu=atmega8?尝试将 -V 开关添加到 simulavr 命令以获得更多线索。
关于c - 将 simulavr 与 avr-gdb 一起使用时抛出奇怪的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18431726/