Пример перекомпиляции ledramp в avr-gcc вызывает ошибку сегментации - PullRequest
0 голосов
/ 15 февраля 2012

У меня установлен симавр на Ubuntu.У меня установлены следующие пакеты: avrdude binutils-avr gcc-avr avr-libc gdb-avr libelf-dev libglut3-dev gtkwave build-essential.

Я попытался запустить пример 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

Я пытаюсь использовать команду «file» для сравнения исходного файла elf и моего файла elf, вывод такой же:

./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

Кто-нибудь может объяснить, что пошло не так?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2017

@ XTL имеет хороший совет, запустите ledram.elf с помощью gdb и посмотрите, где он падает.Несмотря на то, что я пытался подготовить примеры для подстройки «вырезать и вставить», я пробовал не все.

Другой вариант - сделать «make V = 1» и посмотреть, что отличается при компиляции оригинала.ledramp и новый ... исходный создается с помощью «make-файла верхнего уровня», и он может быть немного другим (например, возможно, с использованием gcc vs clang?).

Один полезный бит - получитьвывод, который вы получите при выполнении make V = 1, и сообщите нам, какую версию компилятора вы используете ...

0 голосов
/ 06 апреля 2012

Из этой строки:

. / Obj-i686-linux-gnu / ledramp.elf: исполняемый 32-разрядный LSB ELF, Intel

Похоже, что вы случайноскомпилировала программу для запуска на главном ПК, а не на AVR.

...