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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> 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
AHTOXA
сообщение Oct 27 2012, 14:10
Сообщение #2


фанат дивана
******

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



Цитата(ivainc1789 @ Oct 27 2012, 18:45) *
в результате все решилось простым редактированием соотв хидеров (просто ставим где-нибудь в файле пробел потом его удаляем, сохраняем файл) и ошибки компиляции пропадают... У кого-нибудь такое уже было? И как часто приходится вам сталкиваться с такими глюками в Eclipse?
ПКМ на проекте - Index - Rebuild.
Цитата(ivainc1789 @ Oct 27 2012, 18:45) *
какие есть пути для исправления? Я так понимаю, для GCC такие дефайны слишком сложные?
Эту ошибку, насколько я могу судить, выдаёт не GCC, а сама эклипса. У неё свой парсер (очень крутой). То есть, проект может компилироваться, а эклипса может выдавать ошибки. Решение проблемы - переписать макрос по-правильному.
(У меня была недавно похожая проблема, оказалось, что неправ был всё-таки я, а не эклипса)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 27 2012, 15:04
Сообщение #3


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

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



Переписать что-то не так-то просто оказалось. В IAR'е полное определение макроса для сброса бита порта:

Код
// где-то в .h файле
#define _PORT_POS_(a) GPIO##a  
#define _PORT_POS(a) _PORT_POS##_(a)
#define _BIT_BR_(a) GPIO_BSRR_BR##a
#define _BIT_BR(a) _BIT_BR##_(a)

#define PINCLR(x) (_PORT_POS(x##p)##->BSRR=##_BIT_BR(x##b))


// где-то в .c файле
#define TESTp        B    // порт пина
#define TESTb        0    // номер пина

int main() {
  PINCLR(TEST); // сбрсываем пин B0 (должно преобразоваться в GPIOB->BSRR = GPIO_BSRR_BR_0)
  return 0;
}


Чую, надо как-то разложить макрос на части, но как только в подстановке появляются символы "=" и "->" - начинается ругань...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Oct 27 2012, 16:00
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Вообще-то именно те ##, на которые ругается, они лишние, их можно безболезненно удалить или заменить на пробелы.



--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 27 2012, 19:08
Сообщение #5


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

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



Цитата(SSerge @ Oct 27 2012, 20:00) *
Вообще-то именно те ##, на которые ругается, они лишние, их можно безболезненно удалить или заменить на пробелы.

Если я вас правильно понял, то макрос нужно переделать так:
Код
#define PINCLR(x) (_PORT_POS(x##p)->BSRR=_BIT_BR(x##b))

Это действительно приводит к устранению исходных ошибок, но появляется одна новая:


Код
'GPIO_BSRR_BR0' undeclared (first use in this function)    main.c    /IndigoTest/src    line 39    C/C++ Problem
Symbol 'GPIO_BSRR_BR0' could not be resolved    main.c    /IndigoTest/src    line 39    Semantic Error

Т.е. должно преобразовываться в GPIO_BSRR_BR_0, а по факту GPIO_BSRR_BR0. В IAR'е все нормально.

Да... Пришлось все переосмыслить и в итоге заработало нормально:
Код
// где-то в .h файле
#define _PORT_POS_(a) GPIO##a
#define _PORT_POS(a) _PORT_POS_(a)
#define _BIT_BR_(a) GPIO_BSRR_BR_##a
#define _BIT_BR(a) _BIT_BR_(a)

#define PINCLR(x) (_PORT_POS(x##p)->BSRR=_BIT_BR(x##b))


// где-то в .c файле
#define TESTp        B    // порт пина
#define TESTb        0    // номер пина

int main() {
  PINCLR(TEST); // сбрсываем пин B0 (должно преобразоваться в GPIOB->BSRR = GPIO_BSRR_BR_0)
  return 0;
}
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 27 2012, 19:11
Сообщение #6


фанат дивана
******

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



Извините, я сильно не вчитывался, но может быть так:
Код
#define _BIT_BR_(a) GPIO_BSRR_BR_##a
#define _BIT_BR(a) _BIT_BR_(a)

---
Упс, опоздалsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 28 2012, 06:26
Сообщение #7


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

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



Осталась давнее предупреждение из файла STM32F0xx_rtc.c:
Код
unused variable 'wutcounter' [-Wunused-variable]    stm32f0xx_rtc.c    /IndigoTest/SPD/src    line 311    C/C++ Problem

там объявлена неиспользуемая переменная:
Код
__IO uint32_t wutcounter = 0x00;

Зачем?
В IAR использовал некоторые расширения. Например для шины 1wire тайминги весьма критичны, поэтому необходимо запрещать все на время их счета. Вот как выглядела процедура ини шины в IAR:
Код
// сброс на шине
// возвращает 1 если нет устройств, 0 если обнаружены устройства
unsigned char OWReset(void){
  unsigned char Status;
  PINCLR(DQ);Delay1wire(Trstl);
  __istate_t s = __get_interrupt_state();
  __disable_interrupt();
  PINSET(DQ);Delay1wire(Tpdh+Tpdl/2);
  if (PINCHK(DQ)) Status = 1;else Status = 0;
  __set_interrupt_state(s);  
  Delay1wire(Trsth-Tpdh-Tpdl/2+Trec);
  return(Status);
}

Есть ли какие-нибудь спец. средства в GCC для замены иаровских extended keywords?
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 30 2012, 05:57
Сообщение #8


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

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


Гуру
******

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


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

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


Гуру
******

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


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

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


Гуру
******

Группа: Свой
Сообщений: 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
AHTOXA
сообщение Nov 1 2012, 04:30
Сообщение #14


фанат дивана
******

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



Цитата(ivainc1789 @ Oct 31 2012, 23:09) *
6. И еще траблы с printf.
...
выдает ошибки типа:
Код
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'
...

Вам нужно добавить к проекту системные вызовы. Пример я прикладывал вот к этому сообщению.
Или посмотрите проект, про который упомянул _Артём_. Вот он.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Nov 1 2012, 05:16
Сообщение #15


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

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



Цитата(_Артём_ @ Oct 31 2012, 23:41) *
У меня установлена Helios Service Release 2, вроде с Zylin работатет нормально.
А чем Zylin заменить можно? И есть ли смысл?
Имхо ничем и незачем. В Индиге (как там в Гелиос не знаю) уже есть "штатный" С/С++ GDB Hardware Debugging. Устанавливается стандартно. Вроде работает нормально и не надо ему мешать ))).
Код
Остановка на main по моему обеспечивается не галкой, а командой инициализации
там можно хоть на Reset_Handler-е тормознуть, хоть на SysTick_Handler, или на main.

Все верно. Только тогда какой смысл галки Window/Preferencies/C/C++/Debug/GDB? Имхо, если только она установлена, то соотв брейк должен быть, но у мну его не наблюдается.

Код
Заменить можно проверкой переменной в каком-нибудь часто вызываемом месте (прерывании от таймера например) и остановкой при выходе за допустимый диапазон.
PS. А что databreakpoint и break поусловию не поддержаны?
У меня J-Link. Я что-то не нашел такой поддержки. Плохо искал? Тут в debug есть только самый минимальный набор функций. Теперь рассмотрим такой пример из моего недавнего проекта. Есть вентилятор скорость которого авторегулируется ресурсами MCU. Драйвер обратной связи вычисляет скорость вращения и записывает/обновляет ее значение в переменной Speed. Отлаживая/проверяя работу драйвера мне хотелось бы знать с какой дельтой поддерживается скорость (ну хотя бы примерно). В Иаре достаточно кинуть Speed в LiveWatch и пронаблюдать. Если делать контроль диапазона значений или пытаться "накопить" кучку значений за например 5 мин работы - это потребует в Иар существенных знаний и телодвижений (установка log breakpoint, настройка expression и т. д.). А как в Eclipse?
Код
К сожалению верно - приходится изголятся - писать
в окне Console (реально пишу mr - остальное Punto Switcher разворачивает).

немного оффтопа. В Punto Switcher (PS) используете вкладку "Правила переключения" при уст галке "Предлагать создать правило..."? У меня что-то эти созданные правила вообще не работают. Вроде там разработчики что-то перемудрили...
Код
Кто заставляет?
Я делаю двойной лик на нужном блоке (например нужет USART0, то его разворачиваю и кликаю на стоке USART0 - обновляет сразу весь блок регистров).

Я не точно выразился. Именно двойной клик на блоке зачем нужен? Да еще при возможности такими кликами включить ВСЕ блоки. Чего ж все то сразу и не включили?
Код
Может и продвинулась, но мне отладка ни в Иар, ни в кейл, ни в эклипсе не понравилась - везде свои недостатки...

Сначала ИАР мне тоже показался каким-то ограниченным. Но сейчас, я ему не вижу альтернативы. Особенно когда надо прыгать от AVR к 8051 а потом к ARM.
Код
Может в Visual Studio попробовать? Правда не знаю как. Был вроде какой-то плагин (visualgdb.com),но оно платное...
Мне кажется за бесплатно ничего толкового никто не предложит. Придется с глюками воевать и тратить кучу времени, которого нет. Так вот подумаешь... и купишь ImageCraft ICCCORTEX8 за 250 баксов для коммерческих проектов...
AHTOXA, спасибо за ссылки. Я вот что-то это проглядел. Просто слишком много новой инфы, эмоций - сразу всего не объять beer.gif

Теперь немного про эксперименты.
Итак, есть проект. Все нормально компилируется, ошибок нет. Хочу сменить тулчейн с Yagarto на Codesourcery. КАК?
Идем в настройки проекта, там есть возможность сменить тулчейн. Вот я на это и повелся. Сменил. Теперь не работает ни тот ни другой. Пути в Path and Symbols вообще не трогает. Долго искал как вернуть все назад. Методом тыка нашел, что нужно восстановить файл .cproject из предварительно созданной резервной копии проекта. Что же делаю не так? Или сменить тулчейн в Индиге в принципе невозможно через Свойства Проекта?
Go to the top of the page
 
+Quote Post

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

 


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


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