|
Indigo + Yagarto + J-Link, после IAR EWARM |
|
|
|
Oct 27 2012, 12:45
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
После знакомства с Eclipse Indigo SR2 и установки и настройки тулчейна остаются некоторые вопросы: 1. Проект с пустой main функцией не захотел компилироваться без ошибок при простом подключении библиотеки периферии с сайта ST. Разбор полетов показал, что некоторые исходники библиотеки не видят определения в собственных хидерах. Я долго с этим разбирался, а в результате все решилось простым редактированием соотв хидеров (просто ставим где-нибудь в файле пробел потом его удаляем, сохраняем файл) и ошибки компиляции пропадают... У кого-нибудь такое уже было? И как часто приходится вам сталкиваться с такими глюками в Eclipse? 2. Вторую проблему пока не решил... GCC уже совсем другой компилятор, поэтому наработанный код в IAR у меня тут не работает. Особенно это касается препроцессора. В IARе я устраивал всякие игры с дефайнами и все нормально работало - здесь такие вещи уже не проходят: Код #define PINCLR(x) (_PORT_POS(x##p)##->BSRR=##_BIT_BR(x##b)) выдается ошибка: Код pasting ")" and "->" does not give a valid preprocessing token main.c /IndigoTest/src line 39 C/C++ Problem pasting "=" and "_BIT_BR" does not give a valid preprocessing token main.c /IndigoTest/src line 39 C/C++ Problem какие есть пути для исправления? Я так понимаю, для GCC такие дефайны слишком сложные?
|
|
|
|
|
 |
Ответов
|
Oct 30 2012, 05:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Вопрос с расширениями IAR решил через функции CMSIS. Короче, удалось собрать и запустить отладку некоторого тестового проекта на STM32F100C8(flash64K,ram8K), который параллельно подготовлен и в IAR. Пока впечатления не очень радостные, проблемы такие: 1. GCC генерит немного больший код. Результаты компиляции сборок Debug/Release: IAR=25Кб/10Кб, GCC=38Кб/11Кб. Огорчительно, что в STM32F100C6( где 32К flash) отлаживать с Эклипсой и GCC не получилось бы, пришлось бы разбивать на части... 2. Особенно интересно сравнить отладку в IAR и GCC. J-Link'ом удалось "походить" по асму и Си коду - тут все нормально, но почему-то не работает плагин EmbSys Reg - значения в регистрах не показывает, хотя вроде я его правильно настроил на целевой кристалл. 3. Не удалось пока (а возможно это и не сделать) аналог окна Live Watch в IAR - это когда программа запущена на выполнение, а значения переменных в окне Expression автоматом обновляются примерно раз в секунду. Мне кажется очень удобным наблюдать некоторые процессы в программе в такой "динамике". Как бы такое сделать, ума не приложу...? 4. Не нашлось аналога команды SetNextStatement в IAR, это когда ставим курсор в произв. место в коде и хотим шагать с этого места. Команда Эклипса Move To Line (если это аналог) у мну не работает - проц просто переходит в running и все...
|
|
|
|
|
Oct 30 2012, 06:36
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ivainc1789 @ Oct 30 2012, 07:57)  1. GCC генерит немного больший код. Результаты компиляции сборок Debug/Release: IAR=25Кб/10Кб, GCC=38Кб/11Кб. Огорчительно, что в STM32F100C6( где 32К flash) отлаживать с Эклипсой и GCC не получилось бы, пришлось бы разбивать на части... Разница небольшая вобщем-то - 10 и 10 кБайт. В другои проекте может и наоборот оказаться... Видно что GCC сильней сжимает неоптимизированный код (не пробовали опцию -Os ставить?). У Иара не молучается так что оптимизация по скорости даёт меньший код? Цитата(ivainc1789 @ Oct 30 2012, 07:57)  2. Особенно интересно сравнить отладку в IAR и GCC. J-Link'ом удалось "походить" по асму и Си коду - тут все нормально, но почему-то не работает плагин EmbSys Reg - значения в регистрах не показывает, хотя вроде я его правильно настроил на целевой кристалл. А что вы для STM использовали как GDB-сервер? GDB от Atollic? Цитата(ivainc1789 @ Oct 30 2012, 07:57)  Мне кажется очень удобным наблюдать некоторые процессы в программе в такой "динамике". Как бы такое сделать, ума не приложу...? У STM была какая-то программа для отображения вроде (stmstudio что ли?), её неудаётся задействовать? Цитата(ivainc1789 @ Oct 30 2012, 07:57)  4. Не нашлось аналога команды SetNextStatement в IAR, это когда ставим курсор в произв. место в коде и хотим шагать с этого места. Команда Эклипса Move To Line (если это аналог) у мну не работает - проц просто переходит в running и все... Да, с Move to Line и Run to Line в Eclipse как-то печально...
|
|
|
|
|
Oct 30 2012, 10:22
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Цитата(_Артём_ @ Oct 30 2012, 10:36)  Разница небольшая вобщем-то - 10 и 10 кБайт. В другои проекте может и наоборот оказаться... Видно что GCC сильней сжимает неоптимизированный код (не пробовали опцию -Os ставить?). Именно с этой опцией цифры и привел. Если ставить -O1,2,3 - результаты просто неприемлемые, вроде остальные ключи командной строки стоят правильные. Их в Yagarto не так и много, чтобы ошибиться... Код У Иара не молучается так что оптимизация по скорости даёт меньший код? У Иара разница при переключениях скорость/код на большинстве моих проектов несущественная, в этом случае тоже. В принципе GCC как компилятор меня лично бы устроил вполне, но проблемы с отладкой... Не так это пока удобно как в Иаре, но буду пробовать дальше разбираться... Код А что вы для STM использовали как GDB-сервер? GDB от Atollic? Со стороны J-Link'а его родной сервер, со стороны Эклипса клиент GDB из Yagarto. Кстати, на сайте Сеггера есть таблица из которой следует, что gdb из Yagarto функциональнее менторовского CodeSourcery (сам не проверял), потому и подсел пока на Yagarto. Код У STM была какая-то программа для отображения вроде (stmstudio что ли?), её неудаётся задействовать? Это прога для рисования графиков по изменению значений переменной. Кому-то возможно полезна, но мне пока такое не требуется. Нужен Live Watch. Если не добьюсь, наверно придется оставаться на Иаре. Кстати, его плагин для Эклипса все еще сильно ограничен, судя по release notes. Прикручивать Эклипс к Иару ради редактора как-то пока не хочется... Эх, нет в халяве совершенства.... а так жаль... Код Да, с Move to Line и Run to Line в Eclipse как-то печально... У меня Run To Line работает нормально. Вот блин, дождался. на строке где производилось деление чисел получил такое сообщение в окне редактора: Код Can't find a source file at "../../../../../gcc-4.7.2/libgcc/config/arm/ieee754-df.S" Locate the file or edit the source lookup path to include its location. такого файла в инсталлированном yagarto нет вообще...
|
|
|
|
|
Oct 30 2012, 20:32
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(ivainc1789 @ Oct 30 2012, 12:22)  В принципе GCC как компилятор меня лично бы устроил вполне, но проблемы с отладкой... Не так это пока удобно как в Иаре, но буду пробовать дальше разбираться... Проблемы с отладкой это прыганье непонятно по каким строкам исходника? Или отсутствие LiveWatch и прочих окон? Цитата(ivainc1789 @ Oct 30 2012, 12:22)  Со стороны J-Link'а его родной сервер, со стороны Эклипса клиент GDB из Yagarto. Я использую такую же связку: J-Link сервер, ПВИ от Yagarto, Zylin, EmbSys. В основном работает. Цитата(ivainc1789 @ Oct 30 2012, 12:22)  Нужен Live Watch. Если не добьюсь, наверно придется оставаться на Иаре. Кстати, его плагин для Эклипса все еще сильно ограничен, судя по release notes. Прикручивать Эклипс к Иару ради редактора как-то пока не хочется... Эх, нет в халяве совершенства.... а так жаль... Если так Live Watch нужен, то можно запустить на отладку ELF полученный от GCC.
|
|
|
|
|
Oct 31 2012, 17:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Цитата(_Артём_ @ Oct 31 2012, 00:32)  Проблемы с отладкой это прыганье непонятно по каким строкам исходника? Или отсутствие LiveWatch и прочих окон? 1. И то, и то. Сейчас вроде первую проблему решил... По крайней мере, после удаления Zylin CDT debug plugin, который у меня так и не заработал в Индиге SR2 все команды инициализации, старта дебага теперь выполняются корректно как и предписано в настройка штатного debug plugin. Единственное, что не работает, это птица в Windows/Pref, которая якобы ставит по умолчанию break на main. У меня не ставит. Чтобы поставить такой брейкпоинт, работает птица в debug configurations... 2. LiveWatch это конечно просто моя привычка. Но чем заменить пока не знаю. В некоторых проектах я отлавливал глюки тоько благодаря LiveWatch. Например, при "наблюдении" некоторой переменной с частотой 1 значение в сек. замечались "проскоки" левых значений. После разбора полетов ошибка быстро находилась. А тут на время выполнения программы все замораживается и что-то посмотреть можно тока при достижении точки останова. Неудобно. 3. Еще я не совсем понял пока как GCC работает с float. То, что IAR определял как float здесь рекастится в double. Как бы дать знать компилятору, чтобы не использовал double? "Ошибка" приведенная выше это вроде просто вызов библиотечной функции а так как исходника нет, вот и ругается... 4. Кнопки Reset при GDB отладке похоже нет. Вместо нее приходится просто выполнять Terminate всего процесса. Верно ли? 5. Разобрался таки с EmbSys register plugin. Как только дочитал тему на нашем форуме в соотв разделе. Так и не понял почему заставляют делать двойной клик на каждом регистре чтобы "активировать" его? 6. И еще траблы с printf. Компиляция стандартной функции из библиотек ST: Код void assert_failed(uint8_t* file, uint32_t line){ printf("BadPar: file %s on line %d\r\n", file, line); while (1); } выдает ошибки типа: Код C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-writer.o): In function `_write_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/writer.c:58: undefined reference to `_write' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-closer.o): In function `_close_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/closer.c:53: undefined reference to `_close' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-fstatr.o): In function `_fstat_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-isattyr.o): In function `_isatty_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-lseekr.o): In function `_lseek_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek' c:/arm/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-readr.o): In function `_read_r': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\reent/../../../../../../../newlib-1.20.0/newlib/libc/reent/readr.c:58: undefined reference to `_read' таких путей у меня в Yagarto вообще нет, но ясно, что тут что-то с библиотеками... Как победить, пока не знаю... Код Если так Live Watch нужен, то можно запустить на отладку ELF полученный от GCC. Если вы про отладку в Иаре, то мне все же хочется найти ему замену. Полную. Надо наработать опыт с GDB отладкой чтобы лучше пользоваться такими возможностями. Но Иаровский плагин я все же попробую, хоть он и ограниченный. Версия 0.13.2 уже сильно продвинулась...
|
|
|
|
|
Nov 1 2012, 05:24
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(ivainc1789 @ Oct 31 2012, 21:09)  3. Еще я не совсем понял пока как GCC работает с float. То, что IAR определял как float здесь рекастится в double. Как бы дать знать компилятору, чтобы не использовал double? "Ошибка" приведенная выше это вроде просто вызов библиотечной функции а так как исходника нет, вот и ругается... для всех строковых флоатов надобно буковку f дописывать и для имён функций соответственно; например: Код float x = 1.0f; float y = sqrtf(fabsf(x)) + 36.6f; также можно добавить ключей компилятору чтоб он варнинги давал полезные: Код CFLAGS += -pedantic CFLAGS += -Wall CFLAGS += -Wextra CFLAGS += -Werror CFLAGS += -Wstrict-prototypes CFLAGS += -Wno-main CFLAGS += -Wdouble-promotion CFLAGS += -Winit-self CFLAGS += -Wsequence-point CFLAGS += -Wfloat-equal CFLAGS += -Wmissing-field-initializers CFLAGS += -Wstack-usage=100
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
ivainc1789 Indigo + Yagarto + J-Link Oct 27 2012, 12:45 AHTOXA Цитата(ivainc1789 @ Oct 27 2012, 18:45) в... Oct 27 2012, 14:10 ivainc1789 Переписать что-то не так-то просто оказалось. В IA... Oct 27 2012, 15:04 SSerge Вообще-то именно те ##, на которые ругается, они л... Oct 27 2012, 16:00 ivainc1789 Цитата(SSerge @ Oct 27 2012, 20:00) Вообщ... Oct 27 2012, 19:08  AHTOXA Извините, я сильно не вчитывался, но может быть та... Oct 27 2012, 19:11 ivainc1789 Осталась давнее предупреждение из файла STM32F0xx_... Oct 28 2012, 06:26     _Артём_ Цитата(ivainc1789 @ Oct 31 2012, 19:09) 1... Oct 31 2012, 19:41      ivainc1789 Цитата(_Артём_ @ Oct 31 2012, 23:41) У ме... Nov 1 2012, 05:16       Сергей Борщ QUOTE (ivainc1789 @ Nov 1 2012, 08:16) Я ... Nov 1 2012, 07:11        AHTOXA Цитата(Сергей Борщ @ Nov 1 2012, 13:11) e... Nov 1 2012, 07:38       _Артём_ Цитата(ivainc1789 @ Nov 1 2012, 07:16) У ... Nov 1 2012, 16:05     AHTOXA Цитата(ivainc1789 @ Oct 31 2012, 23:09) 6... Nov 1 2012, 04:30      _Артём_ Цитата(demiurg_spb @ Nov 1 2012, 07:24) К... Nov 1 2012, 11:58       demiurg_spb Во всяком случае мне в это хотелось бы верить
А у ... Nov 1 2012, 12:14        _Артём_ Цитата(demiurg_spb @ Nov 1 2012, 14:14) В... Nov 1 2012, 12:41         demiurg_spb Так надо раскрутить и понять откуда ноги растут. Н... Nov 1 2012, 12:44          _Артём_ Цитата(demiurg_spb @ Nov 1 2012, 14:44) Т... Nov 1 2012, 12:58           demiurg_spb нет ни одного f после констант.
Но это наверное не... Nov 1 2012, 13:19      ivainc1789 Цитата(demiurg_spb @ Nov 1 2012, 09:24) д... Nov 1 2012, 15:32 ivainc1789 1. На сайте GNU ARM plugin ознакомился с "изв... Nov 4 2012, 06:55 _Артём_ Цитата(ivainc1789 @ Nov 4 2012, 08:55) В ... Nov 4 2012, 23:23  ivainc1789 Цитата(_Артём_ @ Nov 5 2012, 03:23) Нет о... Nov 5 2012, 09:58   Сергей Борщ QUOTE (ivainc1789 @ Nov 5 2012, 12:58) От... Nov 5 2012, 10:25    ivainc1789 Цитата(Сергей Борщ @ Nov 5 2012, 14:25) н... Nov 5 2012, 15:43   _Артём_ Цитата(ivainc1789 @ Nov 5 2012, 11:58) Т.... Nov 5 2012, 12:59 AHTOXA Цитата(ivainc1789 @ Nov 1 2012, 21:32) Я ... Nov 4 2012, 08:30 ReAl Цитата(AHTOXA @ Nov 4 2012, 10:30) А вы п... Nov 4 2012, 09:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|