У меня есть плата STM32F746ZG Nucleo-144pin и я сгенерировал коды, используя STMCubeMx.
Я выбрал FreeRTOS версии 10.0.0, предлагаемой CubeMx, и набор инструментов - SW4STM32.
Я сделал две задачи, и вот моя функция.
Мой код здесь:
void led1_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(1000);
}
}
void led2_task(void)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
HAL_Delay(4100);
}
}
- Приоритет задачи.
Я обнаружил, что если две задачи имеют одинаковый приоритет задачи, две задачи работают нормально, но если они имеют разный приоритет задачи, низкая задача не работает.
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL); ==> Works fine.
----------------------------------------------------------------------------
xTaskCreate(led1_task, "led1_task", 1024, NULL, 2, NULL); ==> This task is not working.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 3, NULL); ==> Works fine.
- Размер стека задач.
Если размер стека двух заданий в совокупности превышал 3 КБ, было подтверждено, что задание работает неправильно.
Код ниже работает правильно.
xTaskCreate(led1_task, "led1_task", 2048, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 1024, NULL, 2, NULL); ==> Works fine.
Однако вторая задача не работает, если размер стека изменяется следующим образом.
xTaskCreate(led1_task, "led1_task", 2048, NULL, 2, NULL); ==> Works fine.
xTaskCreate(led2_task, "led2_task", 2048, NULL, 2, NULL); ==> This task is not working.
Попытка изменить _Min_Stack_Size с 0x400 на 0x4000 в STM32F746ZGTx_FLASH.ld имеет ту же проблему.
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required account of heap */
_Min_Stack_Size = 0x4000; /* required account of stack */
Кто-нибудь может объяснить причину этого?