一项任务中的传输接收

时间:2018-10-19 08:14:44

标签: freertos atmel usart

我正在研究freeRTOS项目和SAM4S Xplained Pro。

在每个x ms的任务中,我想:

  • 启动数据传输
  • 从接收缓冲区中提取数据(如果已检测到帧结束)

我在徘徊是否有办法不仅可以周期性地唤醒此任务,而且还可以在检测到帧结束时唤醒该任务?当此事件唤醒此任务时,将仅执行数据提取,而不执行数据传输。

最好的方法是创建两个任务吗?一个用于发射,另一个用于接收。 我尚未编写任何代码,我正在寻找一些有关如何处理FreeRTOS和通信问题的建议,因为我是其中的初学者...

1 个答案:

答案 0 :(得分:0)

您可以将任务块放在流缓冲区或消息缓冲区(https://www.freertos.org/RTOS-stream-message-buffers.html)上,并使中断将数据发送到缓冲区以取消阻止任务。将读取超时设置为要传输的时间,这样,当需要再次传输或数据到达时,任务将解除阻止。您可以使用https://www.freertos.org/xTaskCheckForTimeOut.html来调整超时,以解决在“阻塞”状态下已经花费的任何时间(即,如果任务最初阻塞100毫秒,但是数据在40毫秒后到达,则导致任务解除阻塞,然后调整下一个阻塞时间到60ms,然后再次阻塞以弥补整个100ms)。