2012-02-15 46 views
0

我在Ubuntu上安裝了simavr。我安裝了以下軟件包: avrdude binutils-avr gcc-avr avr-libc gdb-avr libelf-dev libglut3-dev gtkwave build-essential。avr-gcc重新編譯ledramp示例獲取分段錯誤

我試圖運行ledramp示例(simarv文件夾中的一個示例),工作正常。但是,當我將board_ledramp文件夾複製到board_ledramp2文件夾和 board_ledramp2文件夾時,我重新編譯並執行它,我得到了分段錯誤錯誤。

我的命令是:

make clean 
    make 
    ./obj-i686-linux-gnu/ledramp.elf 

控制檯日誌make命令後:

AVR-CC atmega48_ledramp.c 
    1869  32  11 1912  778 atmega48_ledramp.axf 
CC ../parts/button.c 
CC ledramp.c 
LD obj-i686-linux-gnu/ledramp.elf 
ledramp done 

錯誤消息是:

Loaded 1850 .text 
Loaded 32 .data 
firmware atmega48_ledramp.axf f=8000000 mmcu=atmega48 
Starting atmega48 - flashend 0fff ramend 02ff e2end 00ff 
atmega48 init 
Segmentation fault 

我嘗試使用 「文件」 命令比較我的精靈文件和原始精靈文件 ,輸出是一樣的:

./obj-i686-linux-gnu/ledramp.elf: ELF 32-bit LSB executable, Intel 
80386, version 1 (SYSV), dynamically linked (uses shared libs), for 
GNU/Linux 2.6.15, not stripped 

任何人都可以解釋出了什麼問題?

謝謝!

+0

它墜毀simavr?在gdb中運行它可能會告訴你到底在哪裏。你有沒有設法運行任何其他(更簡單)的自編譯演示? – XTL 2012-02-24 12:36:07

回答

0

從這一行的樣子:

./obj-i686-linux-gnu/ledramp.elf:ELF 32位LSB的可執行文件,英特爾

看起來你無意中編譯的程序在主機PC上運行,而不是在AVR上運行。

0

@XTL在這裏有一個很好的提示,使用gdb運行ledram.elf並查看它崩潰的位置。儘管我試圖讓示例準備好「剪切和粘貼」調整,但我還沒有嘗試過所有的東西。

另一個選擇是做'V = 1',看看編譯原始ledramp和新原型時有什麼不同......原始的是由'頂級makefile'構建的,它可能有微妙的差異比如使用gcc vs clang?)。

一個有用的一點是讓做的,當你得到的輸出使V = 1,告訴我們您正在使用的編譯器版本...