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

 
 
> Breakpoint'ы срабатывают только один раз :(, STM32L+FreeRTOS+Eclipse
InsolentS
сообщение May 13 2013, 06:36
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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] - для короткого!!!


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение May 17 2013, 06:32
Сообщение #2


Гуру
******

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



Было что-то похожее, но давно и с ARM7TDMI. Как борол - не помню. Какая версия эклипсы? какая версия CDT? Какая версия GDB Hardware debugiing support или как его там? Какой launcher используете в эклипсе для запуска GDB? Пробовали ли второй? Нормально ли работают точки останова в программе без FreeRTOS? Какая версия GDB в вашей сборке Yagarto? Пробовали ли вместо Yagarto использовать Linaro?
Уф. Кажется пока все вопросы...
P.S. а, да еще - покажите линкерный скрипт. Может быть такое, что вы ставите точки останова по реальным адресам (0x0800....), а программа работает по отраженным(0x0000....)?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 17 2013, 07:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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.
Прикрепленные файлы
Прикрепленный файл  STM32_flash.rar ( 1.79 килобайт ) Кол-во скачиваний: 10
 


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 17 2013, 07:47
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
InsolentS
сообщение May 17 2013, 09:23
Сообщение #5


Местный
***

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



Цитата(Сергей Борщ @ May 17 2013, 13:47) *
Их вообще там можно переключить? Если да - я попробую снова.

Нет, я тоже не нашёл как переключить и на буржуйских форумах пишут что нельзя.
Но, у DSF, внизу, под списком регистров, отображается окошко, где значение регистра представлено во всех форматах, меня это спасало.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 07:58
Рейтинг@Mail.ru


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