邮箱 队列能否实现一个任务发送,多个任务接受呢

发布于 2021-03-23 21:28:30

现在有一个串口接串口屏幕显示数据的,建立一个任务A,作为接收使用,lord无线模块发送建立一个任务B,作为接受使用。
现在是I2C传感器 作为采集任务做为C,只采集数据。

请问如何把任务C采集到的数据通过 邮箱或者队列 方式送到任务A,任务B 让他们同时接收到。。 我也想过使用EVE 的方式来实现他们呢?
这样的话需要在串口屏幕显示一次性发送所有数据。
我采集的传感器的数据 有些是 100ms 200ms,500ms,1000ms 采集周期 没有到采集周期胡话就发送的话,那发送不就没有变化的数据嘛!
或者有什么好的意见都可以提建议下呢!

查看更多

关注者
0
被浏览
209
7 个回答
四叶草
四叶草 2021-03-24

给你说个方法,其实你就是想实现观察者模式,一个发布信息,多个订阅信息,实现方式如下:
A 发布事件到队列a, B监听事件队列a , C,D,E.... 注册通知的句柄到B中(订阅), B收到a队列不为空,则转发给全部订阅

Jone
Jone 2021-03-23

邮箱和队列都是一对一的,而事件只能传递标志位。
你需要传递数据所以需要用队列或邮箱,可以为线程A、B各创建一个队列(队列是拷贝一份数据再发出的不用担心A/B线程间数据出现冲突);如果A/B线程仅仅是将数据读出可以用邮箱免去拷贝过程了

cpan1118
cpan1118 2021-03-23

A B 俩个线 一个需要实时更新数据,一个需要读取到所有数据一次性更新数据(毕竟lord 速率在那没办法和串口实时更新数据相比)请问这种情况呢?

Aurora_zk
Aurora_zk 2021-03-24

可以创建两个邮箱让他们分别发送和接受,就可以解决你的问题

flashman2002
flashman2002 2021-03-24

邮箱和队列都是一对一的机制,你如果需要一对多或多对多,可以尝试一下发布和订阅机制的软件包,如uMCN。

cxhxy12345
cxhxy12345 2021-03-24

其实你的要求就是一个任务发送数据,另二个任务同时接受这个发送任务的数据做各自的处理。关键是你想发送一次数据(因为数据是相同的)。
如果数据量只是几个字节,那用邮箱,队列都可以,只要分别向对应的任务发送就可以。
如果数据量大,建议如下:
(1)创建一个数据缓冲栈,发送任务将数据压入栈内后,数据标志加2
(2)发送二个信号量标志给二个接受任务,每个任务接受到标志后,再去获取二个任务之间的互斥信号量,获取互斥信号量去读取缓冲区的数据,同时将数据标志减1
上面只是一个简单的思路仅供参考。

aprilhome
aprilhome 2021-03-25

我现在是多个传感器,就是多个C,每个响应时间不同,有的2秒,有的10秒等等,怎么让A能接受到呢,而且要考虑到其中有的传感器坏了没有数据的情况

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览