Я интегрирую FreeRTOS cmsis_v2 на свой STM32F303VCx и сталкиваюсь с определенной проблемой, а затем использую флаги событий при блокировке задачи, чтобы дождаться подтверждения операции от другой задачи.
Если задача выполняет следующий код, все другие задачи получают минимальное время выполнения (понятно, потому что ОС постоянно проверяет evt_flg):
for(;;)
{
flag = osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, 0);
if (flag == EventOccured)
{
/* Task main route */
osEventFlagsClear (evt_flg,EventOccured);
}
}
Но если установить таймаут на osWaitForver
: osEventFlagsWait (evt_flg, EventOccured, osFlagsWaitAny, osWaitForver )
, вся программа перейдет в HardFault.
Каково лучшее решение для такого поведения? Мне нужна задача, чтобы дождаться флага и не блокировать запуск других, таких как чтение ввода терминала.