|
Eclipse + GCC для ARM, Среда разработки для ARM, причем бесплатная... |
|
|
|
Oct 23 2007, 22:52
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Всем хороши коммерческие версии типа Keil, IAR, ... кроме цены. А "лекарство" выходит частенько с опозданием на год и более. Да и отладчики (JTAG) у них не самые дешевые. Сейчас многие начинают советовать GCC на платформе Eclipce с OpenOCD дебагером, который поддерживает от wiggler-а до Segger-а - кому что по карману. Да, GCC уступает немного коммерческим компиляторам по скорости и плотности кода, на у ARM-ов и памяти и скорости для большинства задач - с запасом. Одна беда - при всем разнообразии подобных пакетов нет ни одного, чтобы поставил - и сразу заработало... Может кто-то уже прошел через эти тернии? Вопрос не праздный...
--------------------
Sleo
|
|
|
|
|
Oct 23 2007, 23:51
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(DASM @ Oct 24 2007, 02:59)  Я купил уже от OLIMEX ARM-JTAG и ARM-JTAG-Tiny - по документации они как раз под такую среду и заточены. Но после Keil здесь - как в дремучем лесу... ни загрузка, ни отладка не работает - только компилить простой пример пока получилось.
--------------------
Sleo
|
|
|
|
|
Oct 24 2007, 13:15
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Я использую Eclipse+GCC+OOCD+самосборное подобие Wiggler'a. Проблем нет (кроме одного всем известного глюка с вызовом функций из обработчика прерываний в ARM-моде). Всё собирал вручную. Забыл сказать, что работаю в линуксе. KEIL и IAR не пробовал (точнее пробовал, но как-то не пошло. непривычно). Для AVR и MSP тоже использовал Эклипс+GCC, а для TMS320 - Эклипс+техасовский компилятор, который был жестоко выдран (собственно там ничего жестокого нет  ) из из CCS, и который запускался через wine (кстати, прекрасно работал). Единственный минус - не нашел, как сделать отладку TMS-а из линукса. Для Linux/x86 естественно тоже использую Эклипс+GCC. Его-же использую и для написания скриптов на Ruby/Python/Perl (иногда нужно). Таким вот образом обеспечил себе обнообразие среды разработки.
|
|
|
|
|
Oct 24 2007, 22:49
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
2 Puzan: не могли бы вы выложить рекомендации по настройке среды с нуля, а то я начал копать эту тему с той же целью - ободнообразить среды разработки. Правда, в цигвине. Пока знаю только как собирать гцц и утилиты. А вот интеграция эклипса с компилерами, да еще и разными, с дебагерами - это темный лес, терра инкогнита. Версии софта максимально свежие. И еще: мне не нужно знать, где взять "готовую сборку", чтоб, дескать, не мучаться. Хочу понять, как все это хозяйство друг к другу прикручивать. Вы используете только внутрисхемный отладчик, или есть возможность симулировать (в т.ч. и периферию)?
|
|
|
|
|
Oct 25 2007, 06:32
|

Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 9-01-06
Пользователь №: 12 967

|
Цитата(klen @ Oct 25 2007, 09:37)  4. удаляете в Eclipse плагин CDT если он есть 5. качаете плагин embeddedCDT c www.zylin.com и ставите его(там все написано как) 2 klen: Если удалить CDT, то софт для Win и Linux уже нельзя будет собирать?
|
|
|
|
|
Oct 25 2007, 08:52
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(klen @ Oct 25 2007, 16:37)  6. настраиваете в тулсах OpenOCD, в отладке arm-elf-gdb(тут главное загрузочный скрипт) Вот с этим и предстоит, похоже, разбираться в основном. Есть куча док по каким-то тулзам. А не помешало бы и наличие howto по всем (или хотя бы многим) аспектам настройки среды выполнения программных проектов. Заодно, пр наличии такого мана больше новичков потянется к опенсорсу. А то когда я начинал (с год назад), посмотрел на клипсу, пощупал - не работает. А кейл завелся сразу. И так у многих. Выкладываю здесь нашу переписку со sleo2000: Цитата Цитата Цитата Пока поставил cygwin и учусь собирать бинутилы (ассемблер, линкер + еще немного) и собсно гцц под свои нужды. Насчет эклипса пока сильно не копал. Конечная цель моих изысканий - создать для себя (и написать хотя бы простенький howto по теме) среду разработки для процессоров с ядром арм и i386, чтобы можно было писать и микрокод, и настраивающе-тестирующие проги для ЭВМ в одной оболочке. Ну и чтоб дяди в сером не слишком приставали Может, получится объединить усилия? А то информации и в самом деле очень мало, даже на английском... Приходится перерывать кучи манов и форумов. Эффект пока мизерный. С уважением, leen.
МЫ копаем эту тему вдвоем. На простых примерах собрать проект для LPC под этой средой (все вместе с ECLIPCE) вроде получается - осталось самое главное: научиться через JTAG грузить код в микропроцессор и отлаживать его там. Тоже хотим сделать свой HowTo. Материалов для чайников много, но для тонкой настройки проектов придется штудировать отдельно описания всех компонентов и выбирать самое важное. А причина примерно та же - чтобы не платить тысячи баксов за рабочее место, но при этом оставаться чистым перед законом. Отлично, тогда, надо это все делать. У меня раньше не было опыта в разработке таких вещей. Но, по-моему, для начала надо поставить и согласовать цели и написать список TODO. Я думаю, ко мне присоединится пара моих друзей, озадаченных этой проблемой - через некоторое время. Цель - уже писал - создание бесплатной рабочей среды на основе открытых программ под различные адра (пока арм и ix86, затем неплохо покопать авр и мсп430), создание мануала по созданию этой среды. Среда должна обеспечивать выполнение следующих задач: - создание проектов под конкретные чипы (не под абстрактрое арм7 ядро, а именно под кристалл - со своими стартапами, картами памяти и заголовочными файлами); - редактирование исходников; - контроль версий ПО (предлагаю опираться на SVN, как на более свежую по сравнению с CVS разработку); - сборку проектов; - отладку в симуляторе (по возможности с поддержкой периферии, хотя не факт, что это так необходимо) и на плате в режиме эмуляции; - прошивку готовых изделий; Задачи: 1 определить необходимые модули; 2 научиться собирать и ставить необхоодимые модули; 3 и далее - пока теряется в тумане. Если будет желание помочь, дельные мысли - просим. Пока что все в самом начале.
|
|
|
|
|
Oct 25 2007, 12:54
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(Сергей Борщ @ Oct 25 2007, 13:44)  На Yagarto есть документация по прикручиванию Open OCD. Самой железки пока нет, поэтому не пробовал. Но выглядит документация довольно неплохо. Документация то есть, причем по стилю - хуже, чем для чайников. Объем огромадный, но в основном за счет всех окон всех инсталяторов Готовые сборки есть, и не одна - у меня есть Yagarto, Olimex, Amontec... Но пока эффект плачевный: все поставлено и запущено точно по ДОК-е, пример компилится (под LPC21xx), но даже при заливке сгенерированного HEX файла проверенным загрузчиком от Philips в чипе не работает... При всей своей привлекательности этот инструмент уже многих, вероятно, заставил отвернуться. Мы вдвоем копаемся уже вторую неделю, но пока без явного положительного эффекта. А те же коммерческие среды (с ARM я работал под KEIL и IAR, для AVR есть шикарная pascale-образная среда у немцев со встроенной на уровне компилятора реально работающей многозадачностью и шикарными библиотеками под любую периферию) - так вот, эти среды дают практический выход на второй - третий день после первого запуска. При всем моем уважении к концепции Open Source сегодня не уверен, что это дешевле - если я провожусь с установкой, настройкой и освоением месяц, то дешевле купить последнюю версию того же RealView или IAR... причем вместе с реально работающим JTAG отладчиком. Если же общими усилиями удастся что-то сделать РЕАЛЬНО работающее даже в руках новичка - это будет реабилитацией Open Source. Готов еще некоторое время посвятить этому мероприятию. И даже пописать итоговый мануал. P.S. под unix - овыми платформами не работал и не смогу - есть определенные ограничения, поэтому речь с моей стороны только о "форточках".
--------------------
Sleo
|
|
|
|
|
Oct 26 2007, 03:27
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(sleo2000 @ Oct 25 2007, 19:54)  Готовые сборки есть, и не одна - у меня есть Yagarto, Olimex, Amontec... Но пока эффект плачевный: все поставлено и запущено точно по ДОК-е, пример компилится (под LPC21xx), но даже при заливке сгенерированного HEX файла проверенным загрузчиком от Philips в чипе не работает... Вы говорите об отладчике, компиляторе, линкере или вашей программе? Что не работает? С отладчиком согласен, нужно повозится чтобы запустить. Но что может не работать в компиляторе? Я пользуюсь arm-elf-gcc давно, сначала под XP, потом перешел на Linux. С компиляцией и сборкой проблем никаких. Посмотрите примеры тут: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ . Должны отлично работать, я лично многие пробовал. Может зададите вопрос поконкретнее? Какая задача и на каком этапе не работает?
|
|
|
|
|
Oct 26 2007, 05:47
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(etoja @ Oct 26 2007, 10:38)  Оба есть в местных закромах, так что на счёт цен не надо смешить народ. Зачем подбиваете людей воровать? Они может новую жизнь начинают.
|
|
|
|
|
Oct 26 2007, 06:32
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(etoja @ Oct 26 2007, 11:45)  Вот обсуждение этого вопроса. Проблеме уже больше двух лет и никто её не решает, поскольку за GNU проекты никто не отвечает. А зачем вложение в PDF? Я не сталкивался с такой проблемой. Все обработчики объявлены naked и использую Код portENTER_SWITCHING_ISR() portEXIT_SWITCHING_ISR() Проект под FreeRTOS
|
|
|
|
|
Oct 26 2007, 08:24
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(etoja @ Oct 26 2007, 14:38)  В GCC некорректно работает обработчик прерывания IRQ. До какой версии? Еще не проверял, но это было в версии 4.1.2, сейчас стабильная 4.2.2, в работе 4.3. Цитата(etoja @ Oct 26 2007, 14:38)  Для быстрой разработки программ используйте KEIL, а для профессиональной работы - компилятор Green Hills. Оба есть в местных закромах, так что на счёт цен не надо смешить народ. Ага. Так вот. Мы не собираемся смешить народ. Мы хотим научиться использовать именно _бесплатную_ среду (оболочка, асм+компилер+линкер, симулятор, интерфейс эмулятора, кой можно собрать на коленке, и кой будет работать и в вынь, и в линь - на FT2232), а не _ворованную_, как это есть сейчас. И попытаемся помочь другим таким же щепетильным. Мне, например, это не нравится. Потому и баламучу тему. 2 sleo2000: предлагаю работать на свежих утилитах. Мои версии: binutils-2.18 gcc-4.2.2 gdb-6.7 eclipse в понедельник обновлю до 3.3.1, пока 3.3.0 ve-1.2M3 эти два пока не обновлялись - на хомсайте валяются эти версии: zylincdt4.0-20070830 embeddedcdt4.0-20070830 Еще что-то на работе было, не помню. ява 6.2, вышла 6.3. Можно обновить, но тоже в понедельник - там за трафик не ругаются. Что еще надо - добавляй.
|
|
|
|
|
Oct 26 2007, 09:26
|

Местный
  
Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035

|
Цитата(etoja @ Oct 26 2007, 07:38)  В GCC некорректно работает обработчик прерывания IRQ. Для быстрой разработки программ используйте KEIL, а для профессиональной работы - компилятор Green Hills. Оба есть в местных закромах, так что на счёт цен не надо смешить народ. А если заказчик требует щепетильности при использовании ПО и соблюдению всех лицензий  ... Так что ворованное не прокатит. Пока что связке gcc+eclipse+gdb не вижу альтернативу. Да и переход с iar на эту связку прошёл довольно безболезненно, благодаря James Lynch и его докам. З.Ы. ещё гигантский плюс в том, что в одной IDE проекты для разных платформ можно реализовывать. До этого приходилось два iarа держать на компе для arm и для avr.
|
|
|
|
|
Oct 26 2007, 10:22
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата 2 Puzan: не могли бы вы выложить рекомендации по настройке среды с нуля В принципе ничего сложного нет. Компилируем binutils, gcc (с опцией --without-headers, нужен для того, чтобы им скомпилить newlib), newlib и снова gcc (уже полностью, с поддержкой newlib). При этом ставим необходимые опции для целевой платформы (для ARM это --target=arm-elf --enable-interwork --enable-multilib). Всё, можно компилировать программки. Чтобы компилятор не использовал инициализацию от newlib (например crt0), в опциях линкера ставим -nostartfiles -nostdlib и пишем свой инициализирующий код. Чтобы при этом использовать функции из newlib, добавляем с список объектных файлов libc.a. Вот как сделал я (кусок Makefile'a): Код CFLAGS = $(FLAGS) -mcpu=$(MCU) -mtune=$(MCU) -march=$(CPUARCH) $(DEBUG) $(THUMB_IW) \ -Wall -std=gnu99 -O$(OPTLEVEL) $(INCLUDES) LDFLAGS = -nostartfiles -nostdlib -T lpc2148_rom.ld LIBGCC = `$(CC) $(CFLAGS) $(THUMB) -print-libgcc-file-name` LIBDIR = /opt/armgcc/arm-elf/lib/`$(CC) $(CFLAGS) -print-multi-directory` LIBC = $(LIBDIR)/libc.a
...
$(ELF) : $(OBJS) $(OBJS32) $(OBJSAS) @echo $(MSG_LINKING) $@ $(LD) -Map $(MAP) --cref $(LDFLAGS) -o $@ $(OBJALL) $(LIBGCC) $(LIBC) @echo $(MSG_SIZE) $(OBJSIZE) $@
$(OBJS) : %.o : %.c @echo $(MSG_COMPILING) $< $(CC) -c $(CFLAGS) $(THUMB) -o $@ $< ... а вообще, в интернете масса примеров и готовых тулчейнов, в которых можно посмотреть, как это делается. Эклипс настраивается, как и на системный gcc. Все-таки gcc - он и в африке gcc. Использую и отладчик (OpenOCD) и симулятор (skyeye), правда для nxp21xx переферию он не эмулирует, по этому применение довольно ограниченное. Кстати, Zylin Embedded CDT не использовал. Надо попробовать. А вообще, говорят, что gcc во многих случаях делает более быстрый и компактный код, чем keil или iar. Я сам не проверял, но вот люди, типа проверили: ftp://www.raisonance.com/STR7/Benchmark/A...C-Benchmark.pdf (обсуждалось когда-то на этом форуме).
|
|
|
|
|
Oct 26 2007, 18:24
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Puzan @ Oct 26 2007, 13:22)  но вот люди, типа проверили... Дела давно минувших дней. Давайте оставим и отсутствие RVCT (явно "намеряли" они там такого, что и возразить на требование ARM убрать сии "результаты" и возразить было нечего ), и минималистичные упоминания о методике и вообще всю эту проверку на их совести. Проверять нужно исключительно самому, со знанием дела, и на свежих релизах компиляторов.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 27 2007, 06:31
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(etoja @ Oct 26 2007, 17:44)  Вопрос к LEEN:
Печатные платы вы чем разводите? Сколько заплатили за САПР? На каждого пользователя лицензия есть или на всех инженеров одна? Микрософт офис на вашем компьютере тоже официально куплен? Хоть вопрос и не мне (к тому-же и оффтоп), но тоже хочется ответить. Мы в нашей организации платы разводим в KiCAD'е, который GPL, и соответственно денег не стоит. Когда есть свободное время, посильно участвуем в разработке - это наш вклад. Микрософт офис тоже не используем - для него давно есть замена в лице OpenOffice, который давно уже в большинстве случаем обогнал MSOffice и по функционалу и по удобству. А вместо Windows используем Linux, что тоже дешевле  Цитата(zltigo @ Oct 26 2007, 22:24)  Дела давно минувших дней. Давайте оставим и отсутствие RVCT (явно "намеряли" они там такого, что и возразить на требование ARM убрать сии "результаты" и возразить было нечего ), и минималистичные упоминания о методике и вообще всю эту проверку на их совести. Проверять нужно исключительно самому, со знанием дела, и на свежих релизах компиляторов. Тестировал ли кто нибудь (желательно непредвзято) GCC vs RVCT на более-менее комплексных тестах? Интересно узнать результат.
|
|
|
|
|
Oct 27 2007, 10:19
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(klen @ Oct 27 2007, 11:54)  с какими библами??? Естественно БЕЗ чего-либо библиотечного в подвергавшихся исследованию местах. Цитата а "комплексные" тесты к компиллеру никаких отношений не имели с роду, к среде разработки ДА!!! Ну перегибать палку не надо - в "С" слишком много на библиотеках, дабы не обращать на это внимание и расуждать о "чистом". С библиотеками ситуация будет похуже для GCC, поскольку при всем их многообразии я, кажется, не наблюдал для GCC библиотек заточенных под ARM и частично писанных на ASM. В коммерческом RVCT это имеется издавна и на тестах с использованием библиотечных он на моей памяти всегда всех делал, иногда очень  . Для версии 5.10 IAR ситуация с производительностью некоторых библиотечных функций резко изменилать (например, ранее тормозной мемсpy() начал на некоторых массивах обгонять "самодельный" писанный на ASM и вылизанный ) - налицо безвариантная замена чисто сишной портируемой библионечной функции на специализированную. Кстати, для IAR начиная с 5.10 GNU библиотеки, как родные  . И binutils в комплекте.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 9 2007, 13:02
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(Puzan @ Oct 26 2007, 14:22)  ..... а вообще, в интернете масса примеров и готовых тулчейнов, в которых можно посмотреть, как это делается. Эклипс настраивается, как и на системный gcc. Все-таки gcc - он и в африке gcc. Использую и отладчик (OpenOCD) и симулятор (skyeye), правда для nxp21xx переферию он не эмулирует, по этому применение довольно ограниченное. Кстати, Zylin Embedded CDT не использовал. Надо попробовать. А вообще, говорят, что gcc во многих случаях делает более быстрый и компактный код, чем keil или iar. Я сам не проверял, но вот люди, типа проверили: ftp://www.raisonance.com/STR7/Benchmark/A...C-Benchmark.pdf (обсуждалось когда-то на этом форуме). Если все так просто - может все-таки поделитесь опытом? Мои мучения с LPC продолжаются. Я не поленился и купил от Olimex плату на SAM7, по известной в Инете PDF-ке все сделал - и все замечательно работает! А на LPC упорно не хочет - может потому, что такой доки нет... Уже три недели курочим примеры, которые есть в сети, но никакого положительного результата. Но раз с Atmel-ом работает - значит может работать! Могу скинуть для анализа ошибок все, что надо от настроек проекта и среды (сейчас установил все сравнительно свежее, под Eclipse 3.3)
--------------------
Sleo
|
|
|
|
|
Nov 10 2007, 16:55
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(sleo2000 @ Nov 9 2007, 16:02)  Если все так просто - может все-таки поделитесь опытом? Мои мучения с LPC продолжаются... ОК. Тогда давайте по порядку. Что делаете, что работает, что не работает? Может ошибки какие выводит?
|
|
|
|
|
Nov 14 2007, 02:54
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Цитата(dch @ Nov 14 2007, 12:30)  ссылка битая Это ссылка на поиск по форуму с ключевым словом eclipse, судя по act=search & highlite=eclipse. Цитата откуда это все качается, просветите плиз. Sun JRE 6u3 - c сайта SunEclipse - c сайта EclipseВсе, что не находится - спрашивается сначала у поисковиков, как внутреннего по форуму, так и внешних, типа гугля.
|
|
|
|
|
Nov 14 2007, 14:31
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(Puzan @ Nov 10 2007, 20:55)  ОК. Тогда давайте по порядку. Что делаете, что работает, что не работает? Может ошибки какие выводит? На сегодняшний день ситуация такая: с простым демо-примером все разобрались - компилится, грузится, отлаживается. Даже по следам написали ДОК-у на русском. Можем поделиться этим комплектом (работаем с Olimex JTAG). Теперь возникли проблемы с подключением библиотек. Коммерческие среды делают это практически автоматом, а тут в одном makefile можно заблудиться. Нужен просто пример подключения стандартных библиотек (stdio, stdlib, string), чтобы проект компилился... Сам пример (main) может ничего и не содержать, кроме пары обращений к библиотеке (например, sprintf(), memset(), ...)
--------------------
Sleo
|
|
|
|
|
Nov 14 2007, 22:03
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Так все ж стандартно... main.c Код #include <stdio.h> при вызове компилера (во флагах в макефайле или напрямую в ком. строке) -I "путь к заголовку". Если надо влинковать библиотеки -L "путь к библиотекам" Про эти флаги очень подробно расписано в мане по гцц, ближе к концу. PS: выложи, пожалуйста.
|
|
|
|
|
Nov 15 2007, 08:07
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(sleo2000 @ Nov 14 2007, 17:31)  Теперь возникли проблемы с подключением библиотек. Коммерческие среды делают это практически автоматом, а тут в одном makefile можно заблудиться. Нужен просто пример подключения стандартных библиотек (stdio, stdlib, string), чтобы проект компилился... Сам пример (main) может ничего и не содержать, кроме пары обращений к библиотеке (например, sprintf(), memset(), ...) Покажите ваш паспорт makefile. А вообще, я не рекомендую использовать printf/sprintf из стандартной библиотеки. Очень уж он там громоздкий. Напишите свой или возьмите готовый. В сети много вариантов валяется.
|
|
|
|
|
Nov 15 2007, 15:51
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(Leen @ Nov 15 2007, 02:03)  Так все ж стандартно... 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. У кого-то есть возможность помочь? Чувствуется, что среда умеет многое, но как ее все заставить сделать это? и под моим управлением... Если получится - готов для остальных тоже описать все в виде учебника...
--------------------
Sleo
|
|
|
|
|
Nov 15 2007, 22:42
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Покажи конфиг 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. тут хотя бы с си разобраться...
|
|
|
|
|
Nov 16 2007, 04:26
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Зачем вы изобретаете велосипед??? Вы makefile с нуля пишете что ли? Возьмите готовый пример, запустите и потом уже изменяйте под ваши нужды. Адреса с примерами приводили уже много раз: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/ . Это один из многих. Остальные спросите у Google. Цитата(sleo2000 @ Nov 15 2007, 21:51)  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 и т.д. Цитата(sleo2000 @ Nov 15 2007, 21:51)  ВОЗНИКЛА СЛЕДУЮЩАЯ БЕДА! Два дня пытаюсь сделать простейший пример на С++ под Eclipse - он упорно делает проект, в котором сам делает makefile, назначает старт программы с адреса 0x8000, и никакие манипуляции с настройками не могут этого изменить. Задача у меня простая: написать простейшую программу с примитивнейшим объектом (классом) типа LED, который будет мигать, и заставить ее работать в плате LPC-P2138.
У кого-то есть возможность помочь? Чувствуется, что среда умеет многое, но как ее все заставить сделать это? и под моим управлением... Если получится - готов для остальных тоже описать все в виде учебника... У вас интернет есть или нет??? http://www.yagarto.de/howto/yagarto2/index.htmlНа всякий случай еще текстом: При создании проекта нужно выбирать "Makefile project"->"Other toolchain". Тогда Eclipse не будет создавать за вас makefile, а будет ожидать что его создадите вы.
|
|
|
|
|
Nov 16 2007, 07:05
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Пытаюсь под 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 и под винду. Если кто-нибудь пробовал настраивать эту связку, поделитесь плз. тестовым проектиком.
|
|
|
|
|
Nov 16 2007, 07:25
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(sleo2000 @ Nov 15 2007, 18:51)  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. Цитата(Paramedic @ Nov 16 2007, 10:05)  Пытаюсь под Ubuntu 7.04 настроить связку Eclipse + OpenOCD + GDB + Wiggler + AT91RM9200. При попытке отладить простой проектик возникают проблемы - при выполнении загрузки вижу такое сообщение: putpkt: write failed: Broken pipe. А кто выводит это сообщение? OpenOCD, GDB или Eclipse?
|
|
|
|
|
Nov 16 2007, 08:08
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(Puzan @ Nov 16 2007, 13:25)  Это можно автоматизировать (как сделал я). Кусок 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 все было бы гораздо проще. Он бы сам в зависимости от флагов выбирал необходимую библиотеку.
|
|
|
|
|
Nov 16 2007, 08:12
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(Puzan @ Nov 16 2007, 10:25)  А кто выводит это сообщение? OpenOCD, GDB или Eclipse? Судя по всему gdb выводит в консоли eclipse при исполнении команды load.
|
|
|
|
|
Nov 16 2007, 10:23
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(axle @ Nov 16 2007, 11:08)  Если бы вы использовали arm-elf-gcc для сборки, а не arm-elf-ld все было бы гораздо проще. Он бы сам в зависимости от флагов выбирал необходимую библиотеку. Внимательней читайте. У меня стоит опция -nostdlib. Цитата(Paramedic @ Nov 16 2007, 11:12)  Судя по всему gdb выводит в консоли eclipse при исполнении команды load. А openocd запущен? Находит устройство? Порт правильный слушает?
|
|
|
|
|
Nov 16 2007, 10:26
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(Puzan @ Nov 16 2007, 13:23)  А openocd запущен? Находит устройство? Порт правильный слушает? Да, даже ресет на таргет проходит. Порт parport 0. Я поэтому и прошу какой-нить простенький примерчик, может дело в make-файле, опциях компиляции...
|
|
|
|
|
Nov 16 2007, 10:52
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(Paramedic @ Nov 16 2007, 13:26)  Да, даже ресет на таргет проходит. Порт parport 0. Я поэтому и прошу какой-нить простенький примерчик, может дело в make-файле, опциях компиляции... А причем тут makefile. Если собирается, значит должно что-то работать. Посмотри дизассемблер. Может быть с расположением что-то попутал (в смысле линкуешь для flash, а запускаешь в ram)?
|
|
|
|
|
Nov 16 2007, 10:59
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(Puzan @ Nov 16 2007, 13:52)  А причем тут makefile. Думаю может не хватать отладочной информации... Хотя опцию -g включил и оптимизация на нуле. Цитата(Puzan @ Nov 16 2007, 13:52)  Посмотри дизассемблер. Может быть с расположением что-то попутал (в смысле линкуешь для flash, а запускаешь в ram)? Скрипт линкера брал готовый, может в нём и косяк, но он вроде простой и адреса указаны правильные: MEMORY { ram : ORIGIN = 0x200000, LENGTH = 0x4000 }
|
|
|
|
|
Nov 16 2007, 11:09
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(Puzan @ Nov 16 2007, 16:23)  Внимательней читайте. У меня стоит опция -nostdlib. У меня тоже! -nostdlib не значит, что надо путь к библиотекам указывать. Просто стандартные библиотеки не будут подключаться по умочанию. Что бы их использовать, нужно непосредственно указывать в опциях: -lc -lm -lgcc и т.д.
|
|
|
|
|
Nov 16 2007, 11:30
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(Paramedic @ Nov 16 2007, 13:59)  Думаю может не хватать отладочной информации... Хотя опцию -g включил и оптимизация на нуле. Скрипт линкера брал готовый, может в нём и косяк, но он вроде простой и адреса указаны правильные: MEMORY { ram : ORIGIN = 0x200000, LENGTH = 0x4000 } Отладочная информация по-любому не причем. В мап-файл посмотри, правильно он память распределил, или нет. Варианта остается два: конфиг openocd и хардварная проблема, типа JTAGSEL неправильно установил, или банально не контачит. Цитата(axle @ Nov 16 2007, 14:09)  У меня тоже! -nostdlib не значит, что надо путь к библиотекам указывать. Просто стандартные библиотеки не будут подключаться по умочанию. Что бы их использовать, нужно непосредственно указывать в опциях: -lc -lm -lgcc и т.д. Не работает
|
|
|
|
|
Nov 16 2007, 11:32
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(Puzan @ Nov 16 2007, 14:30)  или банально не контачит. Это исключено - под виндой в ИАР всё работает...
|
|
|
|
|
Nov 16 2007, 12:03
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-12-05
Пользователь №: 12 295

|
Цитата(Paramedic @ Nov 16 2007, 14:32)  Это исключено - под виндой в ИАР всё работает... Хм... А покажи конфиг для openocd. Где брал его?
|
|
|
|
|
Nov 16 2007, 12:39
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(Puzan @ Nov 16 2007, 15:03)  Хм... А покажи конфиг для openocd. Где брал его? Вот: ----------------------------------------------------------------------------------------- #daemon configuration telnet_port 4444 gdb_port 3333 #interface interface parport parport_port 0 #parport_port 0x378 parport_cable wiggler jtag_speed 0 jtag_nsrst_delay 200 jtag_ntrst_delay 200 #use combined on interfaces or targets that can't set TRST/SRST separately reset_config trst_and_srst srst_pulls_trst #reset_config trst_and_srst #jtag scan chain #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) jtag_device 4 0x1 0xf 0xe #target configuration daemon_startup reset #target arm7tdmi <reset mode> <chainpos> <endianness> <variant> target arm920t little run_and_init 0 arm920t #target_script 0 reset h2294_init.script working_area 0 0x200000 0x4000 backup run_and_halt_time 0 30 ----------------------------------------------------------------------------------------- Переделывал конфиг заточенный под SAM7... Цитата(Puzan @ Nov 16 2007, 14:30)  ...JTAGSEL неправильно установил... А это где устанавливать надо?
|
|
|
|
|
Nov 16 2007, 15:56
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
Цитата(axle @ Nov 16 2007, 14:09)  У меня тоже! -nostdlib не значит, что надо путь к библиотекам указывать. Просто стандартные библиотеки не будут подключаться по умочанию. Что бы их использовать, нужно непосредственно указывать в опциях: -lc -lm -lgcc и т.д. 1. ПО МОЕМУ ВОПРОСУ О ЛИНКОВКЕ БИБЛИОТЕК - всем, кто ответил что-то - спасибо, в поенедельник покопаемся. Хотя мутного много - слишком отвыкли от командной строки 2. По поводу работающего мини-проекта с подробным описанием и копией проекта для прямого импорта в Eclipse (для LPC2138/214) - в понедельник все выложу вместе с описанием на русском и в теме выложу ссылку на архив.
--------------------
Sleo
|
|
|
|
|
Nov 16 2007, 18:27
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 23-10-07
Из: Москва
Пользователь №: 31 665

|
ПРОБУЮ ВЫЛОЖИТЬ АРХИВ С РАБОТАЮЩИМ ПРИМЕРОМ ПОД ECLIPSE ДЛЯ LPC-2138/48
Demo_2138.zip ( 1.22 мегабайт )
Кол-во скачиваний: 285Цитата(KA_ru @ Nov 16 2007, 19:20)  Пользуюсь yagarto - были рекомендации от немцев. И обновляется чаще, чем остальные. На самом деле есть сборка от Olimex - старая, от Amontec - тоже более старая, чем Yagarto.
--------------------
Sleo
|
|
|
|
|
Nov 30 2007, 14:31
|
Группа: Новичок
Сообщений: 3
Регистрация: 29-11-07
Пользователь №: 32 806

|
Так, стыковать все это чудо с ходу не удалось  Будем копать, надеюсь люди здесь добрые и отзывчивые  1. Соответсвтенно поставил eclipse (куча разных вариаций) 2. Есть программатор JTAG от MT-Likn 3. Компилить все получается elf файл имею Ну а теперь собственно вопросы: openocd и JLinkGDBServer - это два аналога - использовать надо либо то либо другое? я правильно понимаю? Через что лучше стыковать? (JLinkGDBServer крякнутый есть) по-русски кто нить может написать как создать проект чтобы дебагер заработал? или надо выкладывать какие сообщения об ошибках выкидывает? настраиваю как показано http://www.yagarto.de/howto/jlink/index.html
|
|
|
|
|
Dec 1 2007, 17:21
|
Группа: Новичок
Сообщений: 3
Регистрация: 29-11-07
Пользователь №: 32 806

|
Эй! ну что - все всё наладили и ушли с форума??  а как же там все там обещали мануал по русски? все дела ... да ... че-то как-то глухо
|
|
|
|
|
Dec 20 2007, 18:48
|

Группа: Новичок
Сообщений: 10
Регистрация: 20-12-07
Пользователь №: 33 477

|
Здесь было рассмотрено уже это но у мя не получилось. Плиз выложите пример с минимумом "лишних" деталей:
Возник такой трабл. Програмлю под ARM контроллеры. Использую гнушный софт. Каким макаром подключать стандартные библиотеки к проге? У меня получается компилить файл который содержит вызов функций стандартной библиотеки, но при линковке объектных файлов возникает ошибка: undefened reference на вызываемую стандартную функцию.
Желателен пример рабочей проги, которая инклудит, например, stdio.h, и вызывает в main функцию sprintf. Плюс еще какой-нить модуль .c с минимальным количеством кода. Плюс make файл который компилит и линкует эти два модуля:
main.c:
#include <stdio.h>
int main(void) { char *Line[5]; sprintf(Line,"%02d",50);//даст варнинг ну ниче
return Return_num(); } ========================= notmain.c:
int Return_num(void) { return 5; }
PS: Вот лог сборки моей рабочей программы со всеми ключами и версиями прог. В той проге смысл тот же примерно (вызов sprintf в main.c). Обратите внимание, что компиляция всех файлов проходит, трабл только в линковке. Что я не так делаю?
make -k -f makefile_rom all rm -f out/*.d out/*.o out/*.lst out/*.map out/*.out out/*.bin =================================================================== arm-elf-gcc (GCC) 4.1.1 (WinARM) Copyright © 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
=================================================================== GNU assembler 060606 20060606 Copyright 2005 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. This assembler was configured for a target of `arm-elf'. =================================================================== GNU ld version 060606 20060606 Copyright 2005 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. ===================================================================
arm-elf-as -Wa -amhls=out/crt.lst -ahls -mapcs-32 source/crt.s -o out/crt.o arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o source/int.c: In function 'AIC_ConfInt': source/int.c:14: warning: assignment makes integer from pointer without a cast arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o arm-elf-gcc -c -MD -O0 source/lowlevelinit.c -o out/lowlevelinit.o arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o arm-elf-ld -T./link/at91sam7s256_flash.ld -Map=out/mit.map out/crt.o out/adc.o out/int.o out/Keyboard.o out/lowlevelinit.o out/main.o -o out/mit.out out/main.o: In function `main': main.c:(.text+0x8b0): undefined reference to `sprintf' make: *** [out/mit.out] Error 1 arm-elf-gcc out/crt.o out/adc.o out/int.o out/Keyboard.o out/lowlevelinit.o out/main.o -mcpu=arm7tdmi -nostartfiles -T./link/at91sam7s256_flash.ld -Wl,--no-warn-mismatch -o out/mit.elf c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(freer.o): In function `_malloc_trim_r': mallocr.c:(.text+0x48): undefined reference to `_sbrk_r' mallocr.c:(.text+0x64): undefined reference to `_sbrk_r' mallocr.c:(.text+0x84): undefined reference to `_sbrk_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(makebuf.o): In function `__smakebuf': makebuf.c:(.text+0x3c): undefined reference to `_fstat_r' makebuf.c:(.text+0x110): undefined reference to `isatty' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(mallocr.o): In function `_malloc_r': mallocr.c:(.text+0x424): undefined reference to `_sbrk_r' mallocr.c:(.text+0x4cc): undefined reference to `_sbrk_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sclose': stdio.c:(.text+0xc): undefined reference to `_close_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sseek': stdio.c:(.text+0x30): undefined reference to `_lseek_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__swrite': stdio.c:(.text+0x84): undefined reference to `_lseek_r' stdio.c:(.text+0xac): undefined reference to `_write_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(stdio.o): In function `__sread': stdio.c:(.text+0xd0): undefined reference to `_read_r' collect2: ld returned 1 exit status make: *** [out/mit.elf] Error 1 make: Target `all' not remade because of errors.
|
|
|
|
|
Dec 20 2007, 20:53
|

Местный
  
Группа: Свой
Сообщений: 304
Регистрация: 5-07-04
Из: г. Москва
Пользователь №: 259

|
Цитата(123730 @ Dec 20 2007, 21:48)  ..... ./link/at91sam7s256_flash.ld - на этот файл взглянуть можно?
--------------------
Водку пьянствовать и безобразия нарушать!!!
|
|
|
|
|
Dec 20 2007, 21:31
|

Группа: Новичок
Сообщений: 10
Регистрация: 20-12-07
Пользователь №: 33 477

|
Да конешн), файлег был стырен с каково-то примера:
/* identify the Entry Point (_vec_reset is defined in file crt.s) */ ENTRY(_vec_reset)
/* specify the LPC2106 memory areas */ MEMORY { flash : ORIGIN = 0, LENGTH = 256K /* FLASH EPROM */ ram : ORIGIN = 0x00200000, LENGTH = 64K /* static RAM area */ }
/* define a global symbol _stack_end (see analysis in annotation above) */ _stack_end = 0x2FFFFC;
/* now define the output sections */ SECTIONS { . = 0; /* set location counter to address zero */ .text : /* collect all sections that should go into FLASH after startup */ { *(.text) /* all .text sections (code) */ *(.rodata) /* all .rodata sections (constants, strings, etc.) */ *(.rodata*) /* all .rodata* sections (constants, strings, etc.) */ *(.glue_7) /* all .glue_7 sections (no idea what these are) */ *(.glue_7t) /* all .glue_7t sections (no idea what these are) */ _etext = .; /* define a global symbol _etext just after the last code byte */ } >flash /* put all the above into FLASH */
.data : /* collect all initialized .data sections that go into RAM */ { _data = .; /* create a global symbol marking the start of the .data section */ *(.data) /* all .data sections */ _edata = .; /* define a global symbol marking the end of the .data section */ } >ram AT >flash /* put all the above into RAM (but load the LMA copy into FLASH) */
.bss : /* collect all uninitialized .bss sections that go into RAM */ { _bss_start = .; /* define a global symbol marking the start of the .bss section */ *(.bss) /* all .bss sections */ } >ram /* put all the above in RAM (it will be cleared in the startup code */
. = ALIGN(4); /* advance location counter to the next 32-bit boundary */ _bss_end = . ; /* define a global symbol marking the end of the .bss section */ } _end = .; /* define a global symbol marking the end of application RAM */
Я пробовал флаги -lc lgcc и по типу этого. Вопщим я многа перепробывал. В какой то момент он просил размещать секции имена которых в моей проге нет. я так подумал они в библиотеке. размещал, но итог нулевой. Всеж прошу выложить пример мелкой проги, которую я привожу выше с минимальным количеством лишнего. Я б тогда наверн примонтировал в свою
Сообщение отредактировал 123730 - Dec 20 2007, 21:28
|
|
|
|
|
Dec 21 2007, 08:56
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(123730 @ Dec 21 2007, 00:48)  Здесь было рассмотрено уже это но у мя не получилось. Плиз выложите пример с минимумом "лишних" деталей: Для того чтобы использовать функции типа printf, sprintf и т.д. необходимо написать функции "system calls" специфичные для твоей платформы. Именно на их отсутсвие компилятор и ругается (_sbrk_r, _write_r и т.д.). Как это сделать а заодно и рабочий пример смотри сюда: http://www.siwawi.arubi.uni-kl.de/avr_proj...ects/#gcc_stdio
|
|
|
|
|
Dec 26 2007, 16:25
|

Группа: Новичок
Сообщений: 10
Регистрация: 20-12-07
Пользователь №: 33 477

|
Стырил я syscalls.c, serials.h, serials.c с рабочего примера, который шел с WinARM. Пример называется at91sam7s64_Hello, сунул в свой проект: arm-elf-as -Wa -amhls=out/Cstartup.lst -ahls -mapcs-32 source/Cstartup.s -o out/Cstartup.o arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o arm-elf-gcc -c -MD -O0 source/Cstartup_SAM7.c -o out/Cstartup_SAM7.o arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o arm-elf-gcc -c -MD -O0 source/serial.c -o out/serial.o arm-elf-gcc -c -MD -O0 source/syscalls.c -o out/syscalls.o arm-elf-gcc -c -MD -O0 source/timers.c -o out/timers.o arm-elf-ld -TAT91SAM7S64-ROM.ld -Map=out/mit.map -lc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -o out/mit.out out/main.o: In function `main': main.c:(.text+0x7c8): undefined reference to `iprintf' make: *** [out/mit.out] Error 1 хобанца а вот так получилось)): arm-elf-as -Wa -amhls=out/Cstartup.lst -ahls -mapcs-32 source/Cstartup.s -o out/Cstartup.o arm-elf-gcc -c -MD -O0 source/adc.c -o out/adc.o arm-elf-gcc -c -MD -O0 source/Cstartup_SAM7.c -o out/Cstartup_SAM7.o arm-elf-gcc -c -MD -O0 source/int.c -o out/int.o arm-elf-gcc -c -MD -O0 source/Keyboard.c -o out/Keyboard.o arm-elf-gcc -c -MD -O0 source/main.c -o out/main.o arm-elf-gcc -c -MD -O0 source/serial.c -o out/serial.o arm-elf-gcc -c -MD -O0 source/syscalls.c -o out/syscalls.o arm-elf-gcc -c -MD -O0 source/timers.c -o out/timers.o arm-elf-gcc -Wl,-TAT91SAM7S64-ROM.ld,-Map=out/mit.map,--cref -lc -lm -lc -lgcc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -o out/mit.out arm-elf-objcopy --output-target=binary out/mit.out out/mit.bin arm-elf-gcc out/Cstartup.o out/adc.o out/Cstartup_SAM7.o out/int.o out/Keyboard.o out/main.o out/serial.o out/syscalls.o out/timers.o -mcpu=arm7tdmi -nostartfiles -TAT91SAM7S64-ROM.ld -Wl,--no-warn-mismatch -o out/mit.elf arm-elf-size out/mit.out text data bss dec hex filename 20336 2176 100 22612 5854 out/mit.out Только исходник вырос на 17 кБ
|
|
|
|
|
Mar 18 2008, 16:16
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 5-05-06
Из: Минск
Пользователь №: 16 792

|
Цитата(gte @ Mar 17 2008, 19:27)  Может ли кто поделиться или подсказать где поискать пример проекта для LPC2368, Среда Eclipce + GCC для ARM + OpenOCD (Amontec sdk4arm) + MT-LINK. Среду вроде бы настроил, простой проект на 2294 компилируется. Теперь бы перейти на LPC2368 :-). Поиск в интернете и по конференциям пока безуспешен. В демо на FreeRTOS есть то, что вам нужно.
|
|
|
|
|
Dec 31 2008, 07:36
|

Electrical Engineer
     
Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778

|
Цитата(Puzan @ Oct 26 2007, 13:22)  В принципе ничего сложного нет. Компилируем binutils, gcc (с опцией --without-headers, нужен для того, чтобы им скомпилить newlib), newlib и снова gcc (уже полностью, с поддержкой newlib). При этом ставим необходимые опции для целевой платформы (для ARM это --target=arm-elf --enable-interwork --enable-multilib). Всё, можно компилировать программки. ой, какая интересная информация... пока что застрял на сборке второго прохода GCC. следую согласно инструкции http://www.eluaproject.net/en/Building_GCC_for_ARMпервый проход перед сборкой newlib (шаг 2): Код ./configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --without-headers --disable-shared--with-gnu-as --with-gnu-ld второй проход - шаг 4: вот тут-то и неясно - почему они не переконфигурят make перед сборкой??? и какие опции нужно задавать для этого?? надо ли указывать дислокацию этой newlib или достаточно сделать ей "make install" ?!
--------------------
|
|
|
|
|
Dec 31 2008, 10:44
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Doka @ Dec 31 2008, 12:36)  следую согласно инструкции http://www.eluaproject.net/en/Building_GCC_for_ARMпервый проход перед сборкой newlib (шаг 2): Код ./configure --target=arm-elf --prefix=$TOOLPATH --enable-interwork --enable-multilib --enable-languages="c,c++" --with-newlib --without-headers --disable-shared--with-gnu-as --with-gnu-ld Просмотрел эту инструкцию, и не понял, в чем глубинный смысл столь хитрых манипуляций (установки gcc в два приема). Какие это дает преимущества перед сборкой gcc вместе с newlib в один прием?
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jan 1 2009, 16:24
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Doka @ Dec 31 2008, 19:06)  очевидно из требования сборки newlib target-версией компилятора Не понял. Можно подробнее? А чем же еще newlib может собираться? Не host-же версией! Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно? Цитата(Doka @ Dec 31 2008, 19:06)  или вы про: "Некоторые компиляторы (GCC) поддерживают внутренние версии множества функций Нет, об этом вообще по-моему речи не было...
Сообщение отредактировал alx2 - Jan 1 2009, 16:29
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Apr 8 2009, 09:45
|

Electrical Engineer
     
Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778

|
Цитата(alx2 @ Jan 1 2009, 20:24)  Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно? 1) судя по описанию http://www.eluaproject.net/en/Building_GCC_for_ARM , второй проход необходим для сборки библиотек (libgcc.a и прочих), которым для неё необходим newlib. сейчас столкнулся с такой проблемой. делаю всё по вышеописанной ссылке, при втором проходе libgcc.a собираетсЯ, но не инсталлируется(( т.е. присутствует в директории из которой ведётся сборка (build-arm-elf/gcc/libgcc.a ), но при make install почему-то не копируется в дистрибутиве нету тулчейна для ARM, но вот для AVR (для сравнения - с АRM картина идентична) картина такая: дистрибутивный тулчейн AVR Код $ ll /usr/lib/gcc/avr/4.1.2/ drwxr-xr-x 2 root root 4096 2008-01-04 19:30 avr3 drwxr-xr-x 2 root root 4096 2008-01-04 19:30 avr4 drwxr-xr-x 2 root root 4096 2008-01-04 19:30 avr5 drwxr-xr-x 2 root root 4096 2008-01-04 19:30 include -rw-r--r-- 1 root root 1512932 2007-05-23 13:05 libgcc.a -rw-r--r-- 1 root root 199534 2007-05-23 13:05 libgcov.a
$ ll /usr/lib/gcc/avr/4.1.2/avr5 -rw-r--r-- 1 root root 1509392 2007-05-23 13:05 libgcc.a -rw-r--r-- 1 root root 199534 2007-05-23 13:05 libgcov.a тулчейн AVR ручной сборки: Код $ ll /usr/local/avr-4.3.3/avr/lib drwxr-xr-x 2 root root 4096 2009-04-07 17:12 avr3 drwxr-xr-x 2 root root 4096 2009-04-07 17:12 avr4 drwxr-xr-x 2 root root 4096 2009-04-07 17:12 avr5 drwxr-xr-x 2 root root 4096 2009-04-07 17:04 ldscripts -rw-r--r-- 2 root root 802476 2009-04-07 17:12 libc.a -rw-r--r-- 2 root root 802476 2009-04-07 17:12 libg.a -rw-r--r-- 1 root root 320392 2009-04-07 17:12 libm.a -rwxr-xr-x 1 root root 25358 2009-04-07 17:12 libnosys.a
$ ll /usr/local/avr-4.3.3/avr/lib/avr5 -rw-r--r-- 2 root root 789240 2009-04-07 17:12 libc.a -rw-r--r-- 2 root root 789240 2009-04-07 17:12 libg.a -rw-r--r-- 1 root root 313024 2009-04-07 17:12 libm.a -rwxr-xr-x 1 root root 25358 2009-04-07 17:12 libnosys.a 2) в опция makefile многих проектов для ARM вижу " -lgcc -lnewlib" - т.е. должна быть еще и бибилиотека с символьными именем newlib ??
--------------------
|
|
|
|
|
Apr 9 2009, 10:52
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Doka @ Apr 8 2009, 14:45)  1) судя по описанию http://www.eluaproject.net/en/Building_GCC_for_ARM , второй проход необходим для сборки библиотек (libgcc.a и прочих), которым для неё необходим newlib. Видимо, описание неверное, ибо выше мной описанным способом однократный make без проблем собирает и libgcc, и прочие необходимые библиотеки. Цитата(Doka @ Apr 8 2009, 14:45)  2) в опция makefile многих проектов для ARM вижу " -lgcc -lnewlib" - т.е. должна быть еще и бибилиотека с символьными именем newlib ?? Если речь идет о редхатовском newlib, то newlib - это общее название проекта. А результатом его сборки являются стандартные библиотеки libc и libm. О библиотеке libnewlib я никогда не слышал.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Apr 10 2009, 09:52
|

Electrical Engineer
     
Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778

|
Цитата(alx2 @ Jan 1 2009, 20:24)  Или спрошу по-другому. Я всегда просто помещал в исходники gcc симлинк на newlib и делал make && make install. Это неправильно? Цитата(alx2 @ Apr 9 2009, 14:52)  Видимо, описание неверное, ибо выше мной описанным способом однократный make без проблем собирает и libgcc, и прочие необходимые библиотеки. хорошо. хочу прояснить для себя 2 вопроса: 1) почему в использованном мною способе сборки libgcc.a собирается, но не инсталлируется в соответствующую директорию 2) не могу понять почему в большинстве источников, описывающих сборку тулчейна для ARM, используется двухпроходная сборка GCC. даже в том, который сходен с вашим. обратите внимание - первая итерация уже с хидерами: Код mkdir gcc-build cd gcc-build ../gcc-3.4.3/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=../newlib-1.12.0/newlib/libc/include # Note: this step requires root privileges under Linux to copy the newlib headers into a subdirectory under $PREFIX. make all-gcc make install-gcc
Getting.Started.with.LPC2000.using.GCC.pdf ( 357.22 килобайт )
Кол-во скачиваний: 1649
--------------------
|
|
|
|
|
Apr 13 2009, 10:33
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Doka @ Apr 10 2009, 14:52)  хорошо. хочу прояснить для себя 2 вопроса: 1) почему в использованном мною способе сборки libgcc.a собирается, но не инсталлируется в соответствующую директорию Рискну высказать предположение: потому что способ неправильный. Раз в документе, описывающем этот способ, уже нашли неверное утверждение, не удивлюсь, если там и инструкция по сборке окажется неверной. Цитата(Doka @ Apr 10 2009, 14:52)  2) не могу понять почему в большинстве источников, описывающих сборку тулчейна для ARM, используется двухпроходная сборка GCC. Вот и я не могу...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Apr 14 2009, 11:03
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Doka @ Apr 14 2009, 01:05)  где взять правильный скрипт для сборки ARM-тулчейна?! Где взять, не знаю. Но могу описать, как сборка arm-elf-gcc с newlib-ом происходит у меня. Код tar -yxf gcc-core-x.x.x.tar.bz2 tar -yxf gcc-g++-x.x.x.tar.bz2 tar -zxf newlib-x.xx.x.tar.gz ln -fs newlib-x.xx.x/newlib gcc-x.x.x/newlib mkdir build cd build ../gcc-x.x.x/configure --prefix=/usr/local --target=arm-elf --with-gcc --with-gnu-ld --with-gnu-as --enable-languages=c,c++ --disable-nls --with-newlib --enable-newlib-io-long-long gmake all gmake install
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Feb 28 2010, 19:49
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Проект не плюсовый? Вываливай... Код /DISCARD/ : { *(.eh_frame_hdr) *(.eh_frame) } (это в файле .cmd - скрипт линкера) Когда дойдёте до запуска программатора, поделитесь исправленными файлами .cfg от opencd.
Сообщение отредактировал Genadi Zawidowski - Feb 28 2010, 19:51
|
|
|
|
|
Mar 1 2010, 19:34
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(011119xx @ Mar 1 2010, 22:41)  Извините, но мне не понятно что делать. То что это надо добавить в файл .cmd понятно, а куда конкретно - нет. Куда-нибудь в конец, перед последней скобкой: Код SECTIONS { .text : {
......
/DISCARD/ : { *(.eh_frame_hdr) *(.eh_frame) } } Что касается warning-а, то это Project - Options - C/C++ Build - Discovery options, и там либо снять птичку "Automate discovery...", либо выбрать "GCC per project scanner info profile" и заменить в строке "compiler invocation command" "gcc" на "arm-gcc" или что там у вас.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 14 2010, 02:50
|
Группа: Новичок
Сообщений: 1
Регистрация: 14-05-10
Пользователь №: 57 253

|
Всё.... Имел я ввиду этот Eclipse CDT для ARM вместе с YAGARTO, Cygwin и иже с ними. Столько времени потратил только для того чтобы убедиться что другие были правы в том что не нужно связываться. Из своих наблюдений смело могу заключить что вся эта конструкция нопоминает оную из кубиков разного размера и неправильной формы, благодаря чему получается что любая посторойка обречена на развал, а если и простоит какое-то время то развалиться при следующей попытке использования. Отсюда же следует маловероятность повторить то что уже сделано (и скорее всего развалилось). Чем сложнее задумання конструкция, тем, в корне убическом, меньше шансов на успех. Потому на интернете и нет упоминаний о проектах отличных от Demo примеров. Дальше примеров дела идут, видимо, только в исключительных случаях. Имеете желание улететь с работы – Eclipse вам в руки. Это же надо такое предложить: Сначала поучите как составить makefile, потом linker script, потом попудрите мозги над опциями компилятора и вообще над тем как его прикрутить к Eclipse. Прикрутили ? Замечательно – теперь ещё библиотеки надо. А какие? А кто его знает – надо ещё несколько дней потрахтить чтобы выяснить. Ещё каки-то файлы конфигураций по любому поводу, по разным правилам. Для одного дебаггера один хаос, для другого другой. И ещё интересно – инженер поддержки из NXP, котрый несколько часов ведёт занятия и лабораторную работу по NXP Expresso ( Eclipse с Code Red) , при вопросе - “ Ну, хорошо, с вашими Evaluation PCBs дебагить можно. А как симулировать? “ , бодро, со знанием дела отвечает –“ Хороший Вопрос! Не могу на него ответить, но узнаю обязательно!” Так как тогда продвигаться дальше, если не-у-кого получить быстрый и вразумительный ответ? И так неделями – и на работе и дома. Так и не вник.
|
|
|
|
|
May 14 2010, 05:39
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(USTAL @ May 14 2010, 05:50)  Дальше примеров дела идут, видимо, только в исключительных случаях. Имеете желание улететь с работы – Eclipse вам в руки. Как говорится - плохому танцору... Делать что-то не читая документации - прямой путь к вашему результату. P.S. Если вы начинаете общение на форуме с такого "вброса говна на вентилятор" - маловероятно, что вы что-то серьезное представляете из себя как специалист и ваш результат закономерен.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 14 2010, 07:47
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(IgorKossak @ May 14 2010, 12:51)  А вот мне Eclipse нравится всё больше. +1:) ЗЫ. Сдаётся мне, что этот CodeRed только сбивает с толку людей. Потому что создаёт обманчивое впечатление, что есть готовое решение типа IAR, а на самом деле разбираться всё равно во всём приходится самому. Честно говоря, не понимаю, кто покупает это.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 16 2010, 09:11
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(klen @ May 16 2010, 14:20)  а сразу без костылей в макефайле прописать не канает? Эт вы зря, вопрос правильный. Сейчас приходится прописывать дефайны в двух местах - в мейкфайле (для компилятора), и в настройках проекта (для эклипса). Если бы можно было как-то заставить эклипсу передавать дефайны мейку, или лучше наоборот, импортировать дефайны из мейкфайла, - было бы здорово. Потому я присоединяюсь к вопросу. Цитата(ZiB @ May 16 2010, 12:45)  С\C++ General -> Path and Symbols -> Symbols в проекте их видно, но как их использовать в майкфайле я не понял. Как я уже написал, я не знаю способа сделать это. Но знаю пути обхода  : - Прописать дефайн и там и там (неудобно);
- Прописать дефайн в каком-нибудь *.h-файле, который включается повсеместно.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 17 2010, 09:52
|

Частый гость
 
Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109

|
Попробовал указать в Compiler invocation command имя компилятора arm-gcc дефайны из вывода компиляции прописались, но вот беда если убрать их, то они не исчезают  как бы сделать что бы при каждой компиляции обновлялись...
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|