rt-thread中用消息队列实现广播功能的一种方法
前面几天在逛论坛时看见有人说RTT中没有广播机制,于是心血来潮,想自己动手写一个,于是有了此文.
1 广播机制分析广播,这个词首先让我想到Android下的广播机制,其是基于Binder来实现的,然而RTT并不是Linux内核的东东,也没有Binder这样的IPC,RTT有自己的一套IPC机制,前面的文章中有说到信号,互斥量,事件,邮箱和消息队列,我们得从这方面动动脑筋.
再回来广播这个词,现实中,电视就是一个广播的例子,我们就以电视来举例,在现实的生活中,不同的人到电视台做节目,然后家家户户就可以在电视机中收到节目了.分析一个这个模型,不同的人到电视台做节目,这里将不同的人暂且叫做广播发送者(广播可以有多个发送方),电视台提供广播发送服务,这里就叫做服务好了,然后每家都可以打开电视机接收电视节目信号,这里每台的电视机就是电视台的一个终端.
因此,这里归结一个,在RTT中,要实现广播机制,首先,广播的发送者是线程,接收者也是线程,做为发送线程和接收线程中间就需要一个服务器,专门实现将发送线程传过来的消息转发给各个已经注册的接收线程.各个接收线程看成是这个服务器的终端.在实现这个功能,首先,作为广播消息的接收终端,那么它得有一定的缓冲能力,得保存一定条数的消息,其次,作为广播的服务器,得唤醒所有等待接收的接收线程.因此,我们得分别给服务器和客户端定义一种数据结构.
2 广播服务器和客户端的控制块在rtdef.h头文件中,在消息队列宏内添加广播控制块的定义: