в общес задача стоит в нормальной работе с UART по приему. сделано чтение из UART по DMA в его буффер. фактически выборка данных происходит в задачке которая спит, по прерыванию DMA о заполненении буфера она разблокируется выполнет чтение из буффера DMA и опять блокируется до следущего прерывания DMA.
проблема, если пришли данные размером менее чем буффер DMA и больее ничего не падает на UART то DMA послушно ждет остатака данных . их долго нет и возмоно не будет. задача заблокирован и соответственно данные застряли.
хочется задачу не блокировать а дать ей задержку . тоесть если таймаут истек то выгрести хотябы все что нападало. если DMA смогло раньше заполнть буфер то то что описано выше.
отсюда вопрос - есть ли штатная возможнось сказать задаче vTaskDelay(X), а замем выдернуть ее из этого состояния раньше чем истечет таймаут. Очень желательно чтоб еще можнобылобы узнать как из задержки вышла задача - по таймауту иди по выдергиыванию.
смотрю в исходники freertos, можно это дописать но вдруг я чето не догоняю то что я хочу можно сделать не напрягаясь
|