прием передачи в одном задании freertos - PullRequest
0 голосов
/ 19 октября 2018

Я работаю над проектом freeRTOS и SAM4S Xplained Pro.

В задаче, вызываемой каждые x мс, я хотел бы:

  • инициировать передачу данных
  • извлекать данные из буфера приема (если конец кадрабыло обнаружено)

Я брожу, есть ли способ разбудить эту задачу не только периодически, но и когда обнаружен конец кадра?И когда эта задача пробуждается этим событием, будет выполняться только извлечение данных, а не передача данных.

Лучший способ состоит в создании двух задач?Один для излучения, другой для приема.Я еще не написал ни одного кода, я ищу несколько советов о том, как бороться с FreeRTOS и проблемами со связью, так как я новичок в этом ...

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете разместить блок задачи в буфере потока или буфере сообщений (https://www.freertos.org/RTOS-stream-message-buffers.html)) и иметь возможность отправлять данные прерывания в буфер, чтобы разблокировать задачу. Установите тайм-аут чтения на период, в который вы хотите передать, таким образом, задача будет разблокирована, когда наступит время повторной передачи или когда поступят данные. Вы можете использовать https://www.freertos.org/xTaskCheckForTimeOut.html, чтобы настроить время ожидания, чтобы учесть любое время, уже проведенное в заблокированном состоянии (т. е. если задачапервоначально блокируется на 100 мс, но данные поступают через 40 мс, что приводит к разблокировке задачи, затем отрегулируйте время следующего блока до 60 мс, прежде чем снова блокировать, чтобы получить целые 100 мс).

...