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

 
 
 
Reply to this topicStart new topic
klen
сообщение Dec 19 2010, 14:26
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



в общес задача стоит в нормальной работе с UART по приему. сделано чтение из UART по DMA в его буффер. фактически выборка данных происходит в задачке которая спит, по прерыванию DMA о заполненении буфера она разблокируется выполнет чтение из буффера DMA и опять блокируется до следущего прерывания DMA.

проблема, если пришли данные размером менее чем буффер DMA и больее ничего не падает на UART то DMA послушно ждет остатака данных . их долго нет и возмоно не будет. задача заблокирован и соответственно данные застряли.

хочется задачу не блокировать а дать ей задержку . тоесть если таймаут истек то выгрести хотябы все что нападало. если DMA смогло раньше заполнть буфер то то что описано выше.

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

смотрю в исходники freertos, можно это дописать но вдруг я чето не догоняю то что я хочу можно сделать не напрягаясь
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 19 2010, 15:42
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



чето я перенапрягся наверно - можно ведь очередь (семафор) для формальной организации событий - она мне и даст два события - выход по таймауту или выход по прерыванию DMA.

тема закрыта.
Go to the top of the page
 
+Quote Post
kan35
сообщение Dec 19 2010, 16:01
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(klen @ Dec 19 2010, 20:26) *
проблема, если пришли данные размером менее чем буффер DMA и больее ничего не падает на UART то DMA послушно ждет остатака данных . их долго нет и возмоно не будет. задача заблокирован и соответственно данные застряли.

Я бы посоветовал отказаться от DMA для UART: делай лучше очередь из байтной очереди и наполняй ее в прерывании RX.
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 20 2010, 19:58
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(kan35 @ Dec 19 2010, 22:01) *
Я бы посоветовал отказаться от DMA для UART: делай лучше очередь из байтной очереди и наполняй ее в прерывании RX.

да тогда все колом встанет на 4 мегабитах, неа..... это глупо имея DMA.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 17:17
Рейтинг@Mail.ru


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