Jump to content

    

Eclipse + GCC для ARM

Если все так просто - может все-таки поделитесь опытом? Мои мучения с LPC продолжаются...

 

ОК. Тогда давайте по порядку. Что делаете, что работает, что не работает? Может ошибки какие выводит?

Share this post


Link to post
Share on other sites

Всем, привет!

 

Скачал документ "http://www.atmel.com/dyn/resources/prod_documents/atmel_tutorial_source.zip",

далее делал все по инструкции,

скачал

URL http://www.atmel.com/dyn/resources/prod_do...ISP%20v1.10.exe

URL http://www.yagarto.de/download/yagarto/yag....6_20070901.exe

URL http://www.yagarto.de/download/openocd/ope...-setup-rc01.exe

URL http://www.yagarto.de/download/yagarto/yag...70303-setup.exe

URL http://www.yagarto.de/download/yagarto/yag...70909-setup.exe

 

вообщем все что написано было все проделал и все сошлось как должно, но вот последный этап не прошел, точнее этап компиляции проекта.

выдается одно предупреждение и одна ошибка

 

Severity and Description Path Resource Location Creation Time Id

Error launching external scanner info generator (gcc -E -P -v -dD D:/@ Denis/ARM_Yagarto_Projects/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c)

demo_at91sam7_blink_flash Unknown 1194790250765 12

 

 

Severity and Description Path Resource Location Creation Time Id

make: *** [blinker.o] Error 127 demo_at91sam7_blink_flash line 0 1194790250687 11

 

Подскажите в чем может быть дело?

Share this post


Link to post
Share on other sites
Severity and Description Path Resource Location Creation Time Id

Error launching external scanner info generator (gcc -E -P -v -dD D:/@ Denis/ARM_Yagarto_Projects/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c)

demo_at91sam7_blink_flash Unknown 1194790250765 12

Severity and Description Path Resource Location Creation Time Id

make: *** [blinker.o] Error 127 demo_at91sam7_blink_flash line 0 1194790250687 11

 

Подскажите в чем может быть дело?

 

так вроде не gcc, а arm-elf-gcc. Посмотрите, в настройках проекта, компилятор по умолчанию gcc устанавливается. Его необходимо заменить на arm-elf-gcc.

Share this post


Link to post
Share on other sites
Баян

http://electronix.ru/forum/index.php?act=S...ighlite=eclipse

МТЛинк за $70 не по карману ?

ссылка битая

 

1. Устанавливаете Sun JRE 6u3 (тоесть самый свежий)

2. качаете Eclipse

3. обновляете Eclipse

4. удаляете в Eclipse плагин CDT если он есть

5. качаете плагин embeddedCDT c www.zylin.com и ставите его(там все написано как)

5. запускаете и проверяете.

6. настраиваете в тулсах OpenOCD, в отладке arm-elf-gdb(тут главное загрузочный скрипт)

7. наслаждаетесь

 

я работаю так под Масдаем XP и под Ubuntu 6.10 64bit

откуда это все качается, просветите плиз.

Share this post


Link to post
Share on other sites
ссылка битая

Это ссылка на поиск по форуму с ключевым словом eclipse, судя по act=search & highlite=eclipse.

откуда это все качается, просветите плиз.

Sun JRE 6u3 - c сайта Sun

Eclipse - c сайта Eclipse

Все, что не находится - спрашивается сначала у поисковиков, как внутреннего по форуму, так и внешних, типа гугля.

Share this post


Link to post
Share on other sites
ОК. Тогда давайте по порядку. Что делаете, что работает, что не работает? Может ошибки какие выводит?

 

На сегодняшний день ситуация такая: с простым демо-примером все разобрались - компилится, грузится, отлаживается. Даже по следам написали ДОК-у на русском. Можем поделиться этим комплектом (работаем с Olimex JTAG).

Теперь возникли проблемы с подключением библиотек. Коммерческие среды делают это практически автоматом, а тут в одном makefile можно заблудиться.

Нужен просто пример подключения стандартных библиотек (stdio, stdlib, string), чтобы проект компилился... Сам пример (main) может ничего и не содержать, кроме пары обращений к библиотеке (например, sprintf(), memset(), ...)

Share this post


Link to post
Share on other sites

Так все ж стандартно...

main.c

#include <stdio.h>

при вызове компилера (во флагах в макефайле или напрямую в ком. строке)

-I "путь к заголовку".

Если надо влинковать библиотеки

-L "путь к библиотекам"

Про эти флаги очень подробно расписано в мане по гцц, ближе к концу.

PS: выложи, пожалуйста.

Share this post


Link to post
Share on other sites
Теперь возникли проблемы с подключением библиотек. Коммерческие среды делают это практически автоматом, а тут в одном makefile можно заблудиться.

Нужен просто пример подключения стандартных библиотек (stdio, stdlib, string), чтобы проект компилился... Сам пример (main) может ничего и не содержать, кроме пары обращений к библиотеке (например, sprintf(), memset(), ...)

 

Покажите ваш паспорт makefile.

 

А вообще, я не рекомендую использовать printf/sprintf из стандартной библиотеки. Очень уж он там громоздкий. Напишите свой или возьмите готовый. В сети много вариантов валяется.

Share this post


Link to post
Share on other sites
Так все ж стандартно...

main.c

#include <stdio.h>

при вызове компилера (во флагах в макефайле или напрямую в ком. строке)

-I "путь к заголовку".

Если надо влинковать библиотеки

-L "путь к библиотекам"

Про эти флаги очень подробно расписано в мане по гцц, ближе к концу.

PS: выложи, пожалуйста.

 

1. По поводу библиотек. Их 8 пар (!) - то есть 16 штук одноименных (например. 16 штук libc.a) - методом перебора ничего не достигли, то не нравится несовместимость по little-big endian (по этому признаку, как понял, они поделены на две группы по 8 штук). Дальше внутри группы то не нравится реализация floating point - ругается на несовместимость аппаратной и программной реализаций (хотя в LPC2138 аппаратной реализации нет). Структура директорий GCC при установке Eclipse - стандартная. Так из какой директории брать библиотеки?

 

2. "Выложить пожалуйста" - имеется в виду доку с примером? - если подскажете, как положить на форуме, то выложу все не таясь... По крайней мере, программы для LPC213x-LPC214x без системных (GCC) библиотек работают и отлаживаются уже без проблем.

 

ВОЗНИКЛА СЛЕДУЮЩАЯ БЕДА! Два дня пытаюсь сделать простейший пример на С++ под Eclipse - он упорно делает проект, в котором сам делает makefile, назначает старт программы с адреса 0x8000, и никакие манипуляции с настройками не могут этого изменить.

Задача у меня простая: написать простейшую программу с примитивнейшим объектом (классом) типа LED, который будет мигать, и заставить ее работать в плате LPC-P2138.

 

У кого-то есть возможность помочь? Чувствуется, что среда умеет многое, но как ее все заставить сделать это? и под моим управлением... Если получится - готов для остальных тоже описать все в виде учебника...

Share this post


Link to post
Share on other sites

Покажи конфиг gcc. И сколько их у тебя?

У меня libc.a 3 штуки - одна для i686 (/lib), две для армов в арм и тумб режимах, /usr/arm-elf/lib и /usr/arm-elf/lib/thumb.

Вот конфиг gcc и arm-elf-gcc

C:\>gcc -v
Using built-in specs.
Target: i686-pc-cygwin
Configured with: ../gcc-4.2.2/configure --prefix=/usr --exec-prefix=/usr --sysco
nfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --inf
odir=/usr/share/info --enable-languages=c,c++ --enable-nls --without-included-ge
ttext -without-x --with-system-zlib --enable-threads=posix --disable-win32-regis
try --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gcc version 4.2.2

C:\>arm-elf-gcc -v
Using built-in specs.
Target: arm-elf
Configured with: ../gcc-4.2.2/configure --prefix=/usr --exec-prefix=/usr --libdi
r=/usr/lib --libexecdir=/usr/lib --target=arm-elf --disable-nls --enable-interwo
rk --enable-multilib --with-newlib --with-headers=../newlib-1.15.0/newlib/libc/i
nclude
Thread model: single
gcc version 4.2.2

Компилил все в /tmp, распаковав архивы и создав рядом папки с теми же именами с припиской -build (gcc-4.2.2, gcc-4.2.2-build, gcc-4.2.2-build-arm-elf). Оттуда ставил. Компилил под cygwin.

P.S. тут хотя бы с си разобраться...

Share this post


Link to post
Share on other sites

Зачем вы изобретаете велосипед??? Вы makefile с нуля пишете что ли? Возьмите готовый пример, запустите и потом уже изменяйте под ваши нужды. Адреса с примерами приводили уже много раз: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ . Это один из многих. Остальные спросите у Google.

 

1. По поводу библиотек. Их 8 пар (!) - то есть 16 штук одноименных (например. 16 штук libc.a) - методом перебора ничего не достигли, то не нравится несовместимость по little-big endian (по этому признаку, как понял, они поделены на две группы по 8 штук). Дальше внутри группы то не нравится реализация floating point - ругается на несовместимость аппаратной и программной реализаций (хотя в LPC2138 аппаратной реализации нет). Структура директорий GCC при установке Eclipse - стандартная. Так из какой директории брать библиотеки?

Ваш компилятор собран с опцией --enable-multilib, что для arm является обычным делом. Поэтому у вас много разновидностей одной и той же библиотеки (например для arm/thumb, little/big-endian, hardfloat/softfloat и т.д.). Линкер сам выбирает какую библиотеку подключать в зависимости от опций, которые вы задаете (-mthumb, -mthumb-interwork, -mfpu=vfp и т.д.). Путь к библиотеке задавать не надо!!! (если конечно у вас не специфическая задача). Для подключения библиотеки libc нужно указать опцию линкера -lc, для libm укажите -lm и т.д.

 

ВОЗНИКЛА СЛЕДУЮЩАЯ БЕДА! Два дня пытаюсь сделать простейший пример на С++ под Eclipse - он упорно делает проект, в котором сам делает makefile, назначает старт программы с адреса 0x8000, и никакие манипуляции с настройками не могут этого изменить.

Задача у меня простая: написать простейшую программу с примитивнейшим объектом (классом) типа LED, который будет мигать, и заставить ее работать в плате LPC-P2138.

 

У кого-то есть возможность помочь? Чувствуется, что среда умеет многое, но как ее все заставить сделать это? и под моим управлением... Если получится - готов для остальных тоже описать все в виде учебника...

У вас интернет есть или нет??? http://www.yagarto.de/howto/yagarto2/index.html

На всякий случай еще текстом: При создании проекта нужно выбирать "Makefile project"->"Other toolchain". Тогда Eclipse не будет создавать за вас makefile, а будет ожидать что его создадите вы.

Share this post


Link to post
Share on other sites

Пытаюсь под Ubuntu 7.04 настроить связку Eclipse + OpenOCD + GDB + Wiggler + AT91RM9200. Всё качал из http://mikestirling.co.uk/drupal/?q=node/2 . При попытке отладить простой проектик возникают проблемы - при выполнении загрузки вижу такое сообщение:

putpkt: write failed: Broken pipe.

Бинарник при этом генерится работоспособный.

В основном ориентируюсь на документ "Using Open Source Tools for AT91SAM7S Cross Development", но там всё расписано для SAM7 и под винду.

Если кто-нибудь пробовал настраивать эту связку, поделитесь плз. тестовым проектиком.

Share this post


Link to post
Share on other sites
1. По поводу библиотек. Их 8 пар (!) - то есть 16 штук одноименных (например. 16 штук libc.a) - методом перебора ничего не достигли, то не нравится несовместимость по little-big endian (по этому признаку, как понял, они поделены на две группы по 8 штук). Дальше внутри группы то не нравится реализация floating point - ругается на несовместимость аппаратной и программной реализаций (хотя в LPC2138 аппаратной реализации нет). Структура директорий GCC при установке Eclipse - стандартная. Так из какой директории брать библиотеки?

 

Обычно компилятор и newlib собраны с опцией multilib и interwork, это для того, чтобы можно было компилить в ARM, THUMB и ARM+THUMB одновременно. По этому есть несколько версий libc и libgcc, которые нужно выбрать в зависимости от флагов компиляции. Это можно автоматизировать (как сделал я). Кусок makefile'а:

LIBGCC  = `$(CC) $(CFLAGS) -print-libgcc-file-name`
LIBDIR  = /opt/armgcc/arm-elf/lib/`$(CC) $(CFLAGS) -print-multi-directory`
LIBC    = $(LIBDIR)/libc.a

где $(CC) = arm-elf-gcc

и подставляем линкеру $(LIBGCC) $(LIBC)

 

Почему так? Я использую опцию -nostdlib.

 

 

Пытаюсь под Ubuntu 7.04 настроить связку Eclipse + OpenOCD + GDB + Wiggler + AT91RM9200. При попытке отладить простой проектик возникают проблемы - при выполнении загрузки вижу такое сообщение:

putpkt: write failed: Broken pipe.

 

А кто выводит это сообщение? OpenOCD, GDB или Eclipse?

Share this post


Link to post
Share on other sites
Это можно автоматизировать (как сделал я). Кусок makefile'а:

LIBGCC  = `$(CC) $(CFLAGS) -print-libgcc-file-name`
LIBDIR  = /opt/armgcc/arm-elf/lib/`$(CC) $(CFLAGS) -print-multi-directory`
LIBC    = $(LIBDIR)/libc.a

где $(CC) = arm-elf-gcc

и подставляем линкеру $(LIBGCC) $(LIBC)

 

Если бы вы использовали arm-elf-gcc для сборки, а не arm-elf-ld все было бы гораздо проще.

Он бы сам в зависимости от флагов выбирал необходимую библиотеку.

Share this post


Link to post
Share on other sites
А кто выводит это сообщение? OpenOCD, GDB или Eclipse?

Судя по всему gdb выводит в консоли eclipse при исполнении команды load.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this