2013-08-25 23 views
1

我正在調試我爲AVR體系結構編寫的程序,並使用avr-gcc-g參數進行編譯。與avr-gdb一起使用simulavr時引發的奇怪異常

我使用下面的命令來啓動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

它是與框架推到堆棧,但我不能完全把我的手指上如何解決它。

回答

1

該堆棧值與本應該非常遠。在程序開始時,它應該接近RAM的結尾,而不是在開始。

這可能是simulavr沒有正確地爲您的設備配置RAM的問題。快速查看源代碼顯示,如果模擬器無法確定正確的值,則堆棧指針被設置爲0。

編譯時在命令行中是否包含-mmcu = atmega8?嘗試添加-V切換到simulavr命令以獲取更多線索。

+0

'-V'參數不會產生任何有用的東西。我仍然得到例外。要回答你的問題,是的,我正在編譯'-mmcu =',但我實際上正在編譯'atmega8u2'。每個芯片的底層架構都是相同的,所以我不明白這會是一個問題。 –