修改文档文件夹位置,添加部分文档

This commit is contained in:
NeoZng
2023-06-14 20:07:39 +08:00
parent 12796f8e70
commit 0eec5d762b
64 changed files with 107 additions and 164 deletions

View File

@@ -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的结构![image-20221201150945052](../../assets/image-20221201150945052.png)
### Message Center的结构![image-20221201150945052](../../.assets/image-20221201150945052.png)
<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 outFIFO先进先出的结构。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);
```
```