【问题标题】:Weird exception thrown when using simulavr with avr-gdb将 simulavr 与 avr-gdb 一起使用时抛出奇怪的异常
【发布时间】:2013-08-25 17:31:31
【问题描述】:

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

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

这与将帧推送到堆栈有关,但我不能完全确定如何解决它。

【问题讨论】:

    标签: c debugging gdb avr avr-gcc


    【解决方案1】:

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

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

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

    【讨论】:

    • -V 参数不会产生任何有用的信息。我仍然遇到异常。要回答您的问题,是的,我正在使用-mmcu= 进行编译,但实际上我正在为atmega8u2 进行编译。每个芯片的底层架构都是相同的,所以我看不出这会是什么问题。
    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多