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

 
 
> Indigo + Yagarto + J-Link, после IAR EWARM
ivainc1789
сообщение Oct 27 2012, 12:45
Сообщение #1


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

Группа: Свой
Сообщений: 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 такие дефайны слишком сложные?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ivainc1789
сообщение Oct 30 2012, 05:57
Сообщение #2


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

Группа: Свой
Сообщений: 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 и все...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 30 2012, 06:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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 как-то печально...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 30 2012, 10:22
Сообщение #4


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

Группа: Свой
Сообщений: 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 нет вообще...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 30 2012, 20:32
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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.


Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 31 2012, 17:09
Сообщение #6


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

Группа: Свой
Сообщений: 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 уже сильно продвинулась...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 19:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
1. И то, и то. Сейчас вроде первую проблему решил... По крайней мере, после удаления Zylin CDT debug plugin, который у меня так и не заработал в Индиге SR2 все команды инициализации, старта дебага теперь выполняются корректно как и предписано в настройка штатного debug plugin.

У меня установлена Helios Service Release 2, вроде с Zylin работатет нормально.
А чем Zylin заменить можно? И есть ли смысл?


Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
Единственное, что не работает, это птица в Windows/Pref, которая якобы ставит по умолчанию break на main. У меня не ставит. Чтобы поставить такой брейкпоинт, работает птица в debug configurations...

Остановка на main по моему обеспечивается не галкой, а командой инициализации
Цитата
tbreak main

там можно хоть на Reset_Handler-е тормознуть, хоть на SysTick_Handler, или на main.

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
2. LiveWatch это конечно просто моя привычка. Но чем заменить пока не знаю. В некоторых проектах я отлавливал глюки тоько благодаря LiveWatch. Например, при "наблюдении" некоторой переменной с частотой 1 значение в сек. замечались "проскоки" левых значений. После разбора полетов ошибка быстро находилась. А тут на время выполнения программы все замораживается и что-то посмотреть можно тока при достижении точки останова.Неудобно.

Заменить можно проверкой переменной в каком-нибудь часто вызываемом месте (прерывании от таймера например) и остановкой при выходе за допустимый диапазон.

PS. А что databreakpoint и break поусловию не поддержаны?

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
3. Еще я не совсем понял пока как GCC работает с float. То, что IAR определял как float здесь рекастится в double.

Да, это проблема, сам бы хотел знать как заставить считать с меньшей точностью.
Есть правда библиотека от ARM для CortexM3 - DSP_Lib, но там вообще fixed point. По идее она компактней.

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
4. Кнопки Reset при GDB отладке похоже нет. Вместо нее приходится просто выполнять Terminate всего процесса. Верно ли?

К сожалению верно - приходится изголятся - писать
Цитата
mon reset 0

в окне Console (реально пишу mr - остальное Punto Switcher разворачивает).

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
5. Разобрался таки с EmbSys register plugin. Как только дочитал тему на нашем форуме в соотв разделе. Так и не понял почему заставляют делать двойной клик на каждом регистре чтобы "активировать" его?

Кто заставляет?
Я делаю двойной лик на нужном блоке (например нужет USART0, то его разворачиваю и кликаю на стоке USART0 - обновляет сразу весь блок регистров).



Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
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'

таких путей у меня в Yagarto вообще нет, но ясно, что тут что-то с библиотеками... Как победить, пока не знаю...

Стандартная ошибка номер не знаю какой... Нужно то ли new реализовать, то ли ещё что ... не помню - printf не использую.

Кажется AHTOXA выкладывал файл, исправляюший эту ошибку (stm32_minimal_with_printf_and_new.zip). А может я путаю...

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
Код
Если так Live Watch нужен, то можно запустить на отладку ELF полученный от GCC.
Если вы про отладку в Иаре, то мне все же хочется найти ему замену. Полную.

Я про то чтобы компилировать GCC, а открывать в IAR ARM EW. Но если отказаться хотите, то это не вариант.

Цитата(ivainc1789 @ Oct 31 2012, 19:09) *
Надо наработать опыт с GDB отладкой чтобы лучше пользоваться такими возможностями. Но Иаровский плагин я все же попробую, хоть он и ограниченный. Версия 0.13.2 уже сильно продвинулась...

Может и продвинулась, но мне отладка ни в Иар, ни в кейл, ни в эклипсе не понравилась - везде свои недостатки... Может в Visual Studio попробовать? Правда не знаю как. Был вроде какой-то плагин (visualgdb.com),но оно платное...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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, 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   Цитата(ivainc1789 @ Oct 31 2012, 21:09) 3...   Nov 1 2012, 05:24
|- - _Артём_   Цитата(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


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 21:59
Рейтинг@Mail.ru


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