|
|
  |
Breakpoint'ы срабатывают только один раз :(, STM32L+FreeRTOS+Eclipse |
|
|
|
May 13 2013, 06:36
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Добрый день! После долгих мучений, удалось настроить Eclipse+Yagarto и скомпилировать код с использованием FreeRTOS под stm32l. Всё запускается, работает, но: точки останова, установленные в теле подпрограмм, почему-то срабатывают только один раз, хотя сам код выполняется правильно (на пинах PA.8 и PB.14 наблюдаю устойчивую генерацию), если шагать в single step, шагает по программе корректно. Проблема проявляется как при отладке с помощью J-Link (J_Link GDB Server), так и st-link (ST-Link_gdbserver). Код: CODE void Task1(void *pvParameters) { GPIO_InitTypeDef toggle = { (1 << 8), GPIO_Mode_OUT, GPIO_Speed_40MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL};
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_Init(GPIOA, &toggle);
while(1) { GPIO_ToggleBits(GPIOA, (1 << 8)); vTaskDelay(10); __asm("NOP"); // здесь установлен breakpoint } }
void Task2(void *pvParameters) { GPIO_InitTypeDef toggle = { (1 << 14), GPIO_Mode_OUT, GPIO_Speed_40MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL};
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_Init(GPIOB, &toggle);
while(1) { GPIO_ToggleBits(GPIOB, (1 << 14)); vTaskDelay(5); __asm("NOP"); // здесь установлен breakpoint } }
int main(void) { xTaskCreate( Task1, ( signed char * ) "Task1", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL), ( xTaskHandle * ) NULL );
xTaskCreate( Task2, ( signed char * ) "Task2", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL), ( xTaskHandle * ) NULL );
vTaskStartScheduler();
return 0; } Initialization Commands отладчика (J-Link): Код monitor speed auto monitor endian little monitor flash device = STM32L151CB monitor flash download = 1 monitor flash breakpoints = 1 monitor reset 0 Вообще очень нестабильная работа с breakpoint'ами - то срабатывают, то не срабатывают, то срабатывают один раз. В чём может быть дело?
Сообщение отредактировал IgorKossak - May 13 2013, 07:06
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
May 13 2013, 08:06
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Для того, чтобы тема не была бесполезной, выкладываю свой шаблон проекта Eclipse + Yagarto + FreeRTOS + std_periph_lib для stm32l. С минимальными изменениями должно подойти для любого stm32. Мне, в своё время, такого шаблона очень не хватало. Пути к FreeRTOS и StdPeriphLib нужно исправить на ваши.
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
May 17 2013, 05:45
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Цитата(DASM @ May 17 2013, 11:10)  Это проблема эклипса или нет ? gdb из консоли нормально работает? Даже не знаю, к своему стыду, GDB из консоли пользоваться не умею. Пытаюсь ввести в консоль, например, команду Код b *0x8002042 но никакой реакции нет на эту команду. Ещё раз уточняю проблему: когда ставлю breakpoint в теле какого-нибудь Task, он (breakpoint) срабатывает только один раз за сеанс отладки, а после этого система как-будто "забывает" про него. И ещё интересный момент: когда пишу в коде инструкцию Код __asm("BKPT #0"); такое чувство, что процессор на ней зацикливается  Похоже, что проблема как-то связана с оптимизацией. Когда ставлю Optimization level = None (-O0), брейкпоинты отрабатывают нормально. Больше всего удивляет, почему брейкпоинт всё-таки срабатывает один раз. Уж тогда бы либо работал, либо совсем не работал.
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
May 17 2013, 07:24
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Цитата(Сергей Борщ @ May 17 2013, 12:32)  Было что-то похожее, но давно и с ARM7TDMI. Как борол - не помню. Какая версия эклипсы? какая версия CDT? Какая версия GDB Hardware debugiing support или как его там? Какой launcher используете в эклипсе для запуска GDB? Пробовали ли второй? Нормально ли работают точки останова в программе без FreeRTOS? Какая версия GDB в вашей сборке Yagarto? Пробовали ли вместо Yagarto использовать Linaro? Уф. Кажется пока все вопросы... P.S. а, да еще - покажите линкерный скрипт. Может быть такое, что вы ставите точки останова по реальным адресам (0x0800....), а программа работает по отраженным(0x0000....)? Eclipse Juno 4.2 SR2 CDT - не разобрался какая версия, но самая свежая Launcher - GDB (DSF) Hardware Debugging Launcher Попробовал второй лаунчер - работает на первый взгляд более стабильно, "одноразовых" брейкпоинтов пока не было при включеной оптимизации -Os. Возможно, проблема была в этом, спасибо! Версия arm-none-eabi-gdb.exe - 7.5.1 Linaro не пробовал, даже не слышал такого слова до этого момента. Скрипт линкера прилагаю. Ещё есть очень надоедливый глюк: при очередном запуске отладки, eclipse как-будто не "подхватывает" сеанс, кнопки старт и стоп не становятся активными, на части отладочных панелей пропадает изображение, помогает только перезапуск eclipse. Цитата(IgorKossak @ May 17 2013, 12:51)  InsolentS, осталось выяснить версию OpenOCD, или что Вы там используете. Из Вашего шаблона выяснить это не удалось. Хотя нет, увидел в первом посте. По поводу ST-Link_gdbserver могу сказать, что мне его так и не удалось нормально запустить. Пользовался OpenOCD 0.6.1, всё пошло нормально. Не думаю, что проблема в gdb-сервере, т.к. поведение абсолютно одинаковое с ST-Link и J-Link, у последнего GDB сервер от SEGGER. У ST-Link_gdbserver есть особенность - нужна версия не выше 1.5.6, после неё attolic добавили защиту от использования их gdb сервера с "инородной" IDE.
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
May 17 2013, 07:47
|

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

|
QUOTE (InsolentS @ May 17 2013, 10:24)  Linaro не пробовал, даже не слышал такого слова до этого момента. Пора попробовать. У них сборки выходят чаще, есть сборки под линух. QUOTE (InsolentS @ May 17 2013, 10:24)  Launcher - GDB (DSF) Hardware Debugging Launcher Попробовал второй лаунчер - работает на первый взгляд более стабильно, "одноразовых" брейкпоинтов пока не было при включеной оптимизации -Os. Возможно, проблема была в этом, спасибо! Я с первым вообще работать не смог - не нашел, где включить отображение регистров в шестнадцатиричном виде. Других претензий не припомню, но эта с этой смириться не смог. Их вообще там можно переключить? Если да - я попробую снова.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 17 2013, 08:26
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(InsolentS @ May 17 2013, 11:24)  Ещё есть очень надоедливый глюк: при очередном запуске отладки, eclipse как-будто не "подхватывает" сеанс, кнопки старт и стоп не становятся активными, на части отладочных панелей пропадает изображение, помогает только перезапуск eclipse. я сейчас делаю проц в плисе, и там отладка из среды через эклипс. Так вот в начале я сделал не стабильно работающий проц, у него слетал кеш программ. А потом я запуская программу из ДДР случайно менял части кода и программа рушилась. Так вот в обоих случаях мне приходилось перегружать среду чтобы все заработало. Вот кстати вспоминаю что брекпоинты тоже подглючивали Сначала я списал это на глючность среды, но сейчас сделав нормальный проц и убрав баг что память стирал проблемы исчезли. Могу запускать отладку по много раз. Все работает, брекпоинты ставятся снимаются и так далее... Причем не помогал даже рессет плисы.. Есть мнение что эклипс не совсем верно отрабатывает подвисший из за чего то проц, причем на уровне общения не с процом а с жетагом. Может есть какие то настройки последовательности рессета....
|
|
|
|
|
May 17 2013, 09:23
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Цитата(Сергей Борщ @ May 17 2013, 13:47)  Их вообще там можно переключить? Если да - я попробую снова. Нет, я тоже не нашёл как переключить и на буржуйских форумах пишут что нельзя. Но, у DSF, внизу, под списком регистров, отображается окошко, где значение регистра представлено во всех форматах, меня это спасало.
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|