mirror of
https://gitee.com/dlmu-cone/bf_original_balance_chassis
synced 2026-07-24 19:47:44 +08:00
修改文档文件夹位置,添加部分文档
This commit is contained in:
@@ -6,8 +6,6 @@
|
||||
>
|
||||
> 支持自定义队列长度,使得订阅者可以自行确定需要的队列长度,适应不同的需求
|
||||
|
||||
|
||||
|
||||
## 总览和封装说明
|
||||
|
||||
**重要定义:**
|
||||
@@ -24,14 +22,10 @@ Message Center不同应用间进行消息传递的中介,它的存在可以在
|
||||
|
||||
Message Center对外提供了四个接口,所有原本要进行信息交互的应用都应该包含`message_center.h`,并在初始化的时候进行注册。
|
||||
|
||||
|
||||
|
||||
## 代码结构
|
||||
|
||||
.h 文件中包含了外部接口和类型定义,.c中包含了各个接口的具体实现。
|
||||
|
||||
|
||||
|
||||
## 外部接口
|
||||
|
||||
**在代码实现上,话题名实际上就是通过一个字符串体现的。**
|
||||
@@ -74,8 +68,6 @@ my_sub=SubRegister("event_name",sizeof(float));
|
||||
|
||||
修改第一个可以扩大话题名长度,第二个确定消息队列的长度,数量越大可以保存的消息越多。
|
||||
|
||||
|
||||
|
||||
## 私有函数和定义
|
||||
|
||||
```c
|
||||
@@ -99,13 +91,11 @@ static void CheckName(char* name)
|
||||
|
||||
> 四个外部接口的实现都有详细的注释,有兴趣的同学可以自行阅读。下方也提供了流程图。
|
||||
|
||||
|
||||
|
||||
## 注册、发布、获取消息流程
|
||||
|
||||
包含一个结构图和四个流程图。
|
||||
|
||||
### Message Center的结构
|
||||
### Message Center的结构
|
||||
|
||||
<center>建议打开原图查看</center>
|
||||
|
||||
@@ -121,19 +111,19 @@ static void CheckName(char* name)
|
||||
|
||||
遍历发布者的话题结点,如果发现相同的话题,直接返回指针即可;遍历完成后发现尚未创建则创建新的话题。
|
||||
|
||||
<img src="../../assets/image-20221201152530558.png" alt="image-20221201152530558" style="zoom: 80%;" />
|
||||
<img src="../../.assets/image-20221201152530558.png" alt="image-20221201152530558" style="zoom: 80%;" />
|
||||
|
||||
- **订阅者:**
|
||||
|
||||
需要注意,由于不同应用/模块的初始化顺序不同,可能出现订阅者先于发布者订阅某一消息的情况,所以要进行发布者链表的遍历,判断是否已经存在相同话题名的发布者,不存在则要先创建发布者结点再将新建订阅者结点并挂载到前者上。
|
||||
|
||||
<img src="../../assets/image-20221201152904044.png" alt="image-20221201152904044" style="zoom:80%;" />
|
||||
<img src="../../.assets/image-20221201152904044.png" alt="image-20221201152904044" style="zoom:80%;" />
|
||||
|
||||
### 推送/获取消息的流程
|
||||
|
||||
- **数组+头尾索引模拟队列**
|
||||
|
||||
<img src="../../assets/image-20221201155228196.png" alt="image-20221201155228196" style="zoom: 71%;" />
|
||||
<img src="../../.assets/image-20221201155228196.png" alt="image-20221201155228196" style="zoom: 71%;" />
|
||||
|
||||
front指向队列头,即最早入队的数据;back指向队列尾,即最新的数据。队列是first in first out(FIFO,先进先出)的结构。back指向的位置是入队数据被写入的位置,front指向的是读取时会出队的位置。当有数据入队,back++;出队则front++。若碰到数组边界,则返回数组头,可以通过取模实现:
|
||||
|
||||
@@ -150,8 +140,6 @@ queue[front]=new_data;
|
||||
front=(front+1)%SIZE_OF_ARRAY;
|
||||
```
|
||||
|
||||
|
||||
|
||||
- **发布者推送消息到指定话题**
|
||||
|
||||
通过发布者指针,将订阅了该话题的所有订阅者遍历,将新数据入队。
|
||||
@@ -160,8 +148,6 @@ front=(front+1)%SIZE_OF_ARRAY;
|
||||
|
||||
从订阅者指针访问消息队列,取出最先进入队列的数据。注意判断队列是否为空,如果为空则返回0。
|
||||
|
||||
|
||||
|
||||
## 示例代码
|
||||
|
||||
```c
|
||||
@@ -191,4 +177,4 @@ d=SubGetMessage(s,&g1);
|
||||
d=SubGetMessage(s,&g1);
|
||||
d=SubGetMessage(s,&g1); // 此时d等于0
|
||||
d=SubGetMessage(ss,&g2);
|
||||
```
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user