InsolentS 0 13 мая, 2013 Опубликовано 13 мая, 2013 (изменено) · Жалоба Добрый день! После долгих мучений, удалось настроить Eclipse+Yagarto и скомпилировать код с использованием FreeRTOS под stm32l. Всё запускается, работает, но: точки останова, установленные в теле подпрограмм, почему-то срабатывают только один раз, хотя сам код выполняется правильно (на пинах PA.8 и PB.14 наблюдаю устойчивую генерацию), если шагать в single step, шагает по программе корректно. Проблема проявляется как при отладке с помощью J-Link (J_Link GDB Server), так и st-link (ST-Link_gdbserver). Код: 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'ами - то срабатывают, то не срабатывают, то срабатывают один раз. В чём может быть дело? Изменено 13 мая, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
InsolentS 0 13 мая, 2013 Опубликовано 13 мая, 2013 · Жалоба Для того, чтобы тема не была бесполезной, выкладываю свой шаблон проекта Eclipse + Yagarto + FreeRTOS + std_periph_lib для stm32l. С минимальными изменениями должно подойти для любого stm32. Мне, в своё время, такого шаблона очень не хватало. Пути к FreeRTOS и StdPeriphLib нужно исправить на ваши. stm32l_freertos_yagarto_template.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 мая, 2013 Опубликовано 13 мая, 2013 · Жалоба В эклипсе для андроида и ксалинкса тоже иногда с брек поинтами траблы, вроде его нет, а программа останавливается... Видать какой то не выловленный еще баг... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
InsolentS 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Я, наверное, создал тему не в том разделе. Надо было в "GNU/OpenSource средства разработки для avr/arm/mips". Если модераторов это не затруднит, было бы очень здорово перенести её туда. Указанный сабж сьел мне весь мозг :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Это проблема эклипса или нет ? gdb из консоли нормально работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
InsolentS 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Это проблема эклипса или нет ? gdb из консоли нормально работает? Даже не знаю, к своему стыду, GDB из консоли пользоваться не умею. Пытаюсь ввести в консоль, например, команду b *0x8002042 но никакой реакции нет на эту команду. Ещё раз уточняю проблему: когда ставлю breakpoint в теле какого-нибудь Task, он (breakpoint) срабатывает только один раз за сеанс отладки, а после этого система как-будто "забывает" про него. И ещё интересный момент: когда пишу в коде инструкцию __asm("BKPT #0"); такое чувство, что процессор на ней зацикливается :( Похоже, что проблема как-то связана с оптимизацией. Когда ставлю Optimization level = None (-O0), брейкпоинты отрабатывают нормально. Больше всего удивляет, почему брейкпоинт всё-таки срабатывает один раз. Уж тогда бы либо работал, либо совсем не работал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Было что-то похожее, но давно и с ARM7TDMI. Как борол - не помню. Какая версия эклипсы? какая версия CDT? Какая версия GDB Hardware debugiing support или как его там? Какой launcher используете в эклипсе для запуска GDB? Пробовали ли второй? Нормально ли работают точки останова в программе без FreeRTOS? Какая версия GDB в вашей сборке Yagarto? Пробовали ли вместо Yagarto использовать Linaro? Уф. Кажется пока все вопросы... P.S. а, да еще - покажите линкерный скрипт. Может быть такое, что вы ставите точки останова по реальным адресам (0x0800....), а программа работает по отраженным(0x0000....)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 17 мая, 2013 Опубликовано 17 мая, 2013 (изменено) · Жалоба InsolentS, осталось выяснить версию OpenOCD, или что Вы там используете. Из Вашего шаблона выяснить это не удалось. Хотя нет, увидел в первом посте. По поводу ST-Link_gdbserver могу сказать, что мне его так и не удалось нормально запустить. Пользовался OpenOCD 0.6.1, всё пошло нормально. Изменено 17 мая, 2013 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
InsolentS 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Было что-то похожее, но давно и с 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. 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. STM32_flash.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Linaro не пробовал, даже не слышал такого слова до этого момента.Пора попробовать. У них сборки выходят чаще, есть сборки под линух. Launcher - GDB (DSF) Hardware Debugging Launcher Попробовал второй лаунчер - работает на первый взгляд более стабильно, "одноразовых" брейкпоинтов пока не было при включеной оптимизации -Os. Возможно, проблема была в этом, спасибо! Я с первым вообще работать не смог - не нашел, где включить отображение регистров в шестнадцатиричном виде. Других претензий не припомню, но эта с этой смириться не смог. Их вообще там можно переключить? Если да - я попробую снова. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Linaro не пробовал, даже не слышал такого слова до этого момента. Linaro aka GNU Tools for ARM Embedded Processors Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Ещё есть очень надоедливый глюк: при очередном запуске отладки, eclipse как-будто не "подхватывает" сеанс, кнопки старт и стоп не становятся активными, на части отладочных панелей пропадает изображение, помогает только перезапуск eclipse. я сейчас делаю проц в плисе, и там отладка из среды через эклипс. Так вот в начале я сделал не стабильно работающий проц, у него слетал кеш программ. А потом я запуская программу из ДДР случайно менял части кода и программа рушилась. Так вот в обоих случаях мне приходилось перегружать среду чтобы все заработало. Вот кстати вспоминаю что брекпоинты тоже подглючивали Сначала я списал это на глючность среды, но сейчас сделав нормальный проц и убрав баг что память стирал проблемы исчезли. Могу запускать отладку по много раз. Все работает, брекпоинты ставятся снимаются и так далее... Причем не помогал даже рессет плисы.. Есть мнение что эклипс не совсем верно отрабатывает подвисший из за чего то проц, причем на уровне общения не с процом а с жетагом. Может есть какие то настройки последовательности рессета.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
InsolentS 0 17 мая, 2013 Опубликовано 17 мая, 2013 · Жалоба Их вообще там можно переключить? Если да - я попробую снова. Нет, я тоже не нашёл как переключить и на буржуйских форумах пишут что нельзя. Но, у DSF, внизу, под списком регистров, отображается окошко, где значение регистра представлено во всех форматах, меня это спасало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться