реклама на сайте
подробности

 
 
> Segmentation fault, Ошибка при запуске программы
Игорь_Ван
сообщение Oct 25 2013, 12:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 25-11-12
Пользователь №: 74 552



Здравствуйте!!!
Пишу программу для at91sam9260. Подключил библиотеки и откомпилировал - ошибок нет. Пытаюсь залить elf файл через tftp в Linux установленный на контроллере. При выполнение выдаёт - Segmentation fault. Среда - Eclipse, тулчейн - Sourcery_CodeBench_Lite_for_ARM_EABI. Программа с атмеловского сайта (getting started), но в файле main.c вместо того, что было, просто пустая функция main. Прикрепляю скрин дерева проекта.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tarbal
сообщение Oct 25 2013, 21:39
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Всегда путаю две эти ошибки. Это использование поинтера, указывающего на неправильный адрес.

Самый близкий, но не самый простой способ -- выполнить программу myprogram под управлением strace.
strace ./myprogram > logfile.txt

Просматривая конец длинного файла logfile.txt можно найти что произошло. Но там надо опыт иметь, чтобы разобраться.

Если у вас есть gdb, то можно прошагать до места ошибки.
Скомпилируйте с ключем -g иначе не будет дебагирования.
Он позволяет ставить брекпоинты, что поможет обойти длинные циклы.

Еще способ:

Понаставить
printf("1\n");
printf("2\n");

В разные места программы каждый раз меняя цифру. Это позволит найти докуда программа доходит прежде чем упасть. Правда надо будет неоднократно добавлять printf и перекомпилировать.

Цитата(Игорь_Ван @ Oct 25 2013, 21:18) *
Про неправильный поинтер, что-то где-то видел на каком-то форуме...
программа выглядит так:
int main(void)
{
return 0;
}
каким образом её починить?)


Если эта программа дает такой результат -- значит она неправильно построена.
Как верно заметили кросс компиляторы бывают для Линукса и для bare metal
У вас на самом компьютере есть gcc? если да, то можно скомпиллировать ту же программу на таргет компьютере.

Вот объяснение разницы компиляторов:
https://sourcery.mentor.com/sgpp/lite/arm/portal/kbentry34

Остальные вопросы:
https://sourcery.mentor.com/sgpp/lite/arm/p...target_arch=arm

Откуда скачивать:
http://www.mentor.com/embedded-software/so...s/lite-edition/

У меня установлены такие tools:
ls arm-none-linux-gnueabi/arm-2011.03/bin/
arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gdbtui
arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-gprof
arm-none-linux-gnueabi-as arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-nm
arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-objcopy
arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-objdump
arm-none-linux-gnueabi-elfedit arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-gcc-4.5.2 arm-none-linux-gnueabi-sprite
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-strip

вы можете обратить внмание, что у них есть префикс arm-none-linux-gnueabi-
Полагаю, что слово linux внутри, говорит, что это для линукса.

Вполне вероятно, что у вас есть и линукс и bare metal версии тулчейна. Попробуйте найти где переключить компилятор в вашем Эклипсе. Скорее всего это путь. Найдите где у вас стоят похожие файлы и если есть для линукса. Если нет, то можете скачать с сайта, что я дал ранее.

Сообщение отредактировал Tarbal - Oct 26 2013, 01:13
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016