FreeRTOS队列多任务数据接收与发送
本文是关于如何使用 FreeRTOS 结构化队列从多个资源接收数据。 在上一篇文章 Arduino与FreeRTOS-FreeRTOS队列管理中,我们学习了通过 FreeRTOS API 和 Arduino 使用消息队列。 但在那个例子中,我们使用了一个队列来接收和发送来自单个任务的数据。 但在实时操作系统中,单个任务也有可能使用单个队列从多个资源接收数据。 多个发送任务可以将数据写入单个队列,但是面临的问题是如何确认接收任务应该知道数据来自哪个任务。
1、队列结构(Queues Structure)
-
为什么要使用队列结构(Queues Structure)
-
为什么接收任务需要知道数据的来源?
因为除此之外别无他法,接收方可以区分数据资源并可以对该数据执行有意义的操作。 最简单的解决方案是使用结构数据类型从单个队列中写入和读取数据。 该结构应该包含一个数据源和我们想要与接收器任务通信的实际值。
下图显示了从多个资源接收数据的结构队列:
上述图片描述了分别测量来自 Arduino 的 A0 和 A1 通道的温度和光传感器值 之后,在 16×2 LCD 上打印传感器值。
- 首先,我们创建一个可以容纳结构的队列。 该结构元素由数据值和资源标签(如模拟通道号)组成
- 在本例中&#