Добрый день!
После долгих мучений, удалось настроить 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] - для короткого!!!