# OneMessage
一个基于 `发布-订阅`模型的跨平台消息框架,纯C语言编写,性能和灵活性极高
------------------------------------------------------------------------
## 什么是OneMessage
OneMessage核心为订阅发布的消息框架,包含了红黑树,链表,队列,crc校验和终端文本格式控制五个基本组件的完整实现。在此基础上完成了如下六个功能模块:
* MSG 消息/话题控制: 控制消息的订阅与发布,话题和订阅者的创建与管理
* FMT 格式化配置:为用户提供格式化字符串的方式来快速配置话题/订阅/过滤器
* EVT 事件机制:基于topic实现的事件触发机制
* LOG 日志系统:多等级的日志打印
* AFL 高级过滤器:为topic提供灵活的筛选方式
* COM 通信解析:用于跨进程/跨设备共享topic
本项目旨在为跨线程和跨设备通信提供一个通用解决方案,以较小的性能代价换取数倍的开发效率。
在STM32F103上使用-Og优化选项下的GCC编译本框架,FLASH占用增加4.2k.
## 相关概念
在OneMessage里只有两种主体,话题(topic)和订阅者(sub/suber/subscriber)。一个消息一定是先被发送到一个话题上,经过筛选/回调/转发等方式发送到另一个话题或订阅者。
话题可以配置filter_function,简单筛选可以发布到此话题的消息,也可以配置高级过滤器(AFL),通过一些较为复杂的规则,将此话题的数据筛选并发布到其他的话题。话题可以通过开关缓冲区来实现无拷贝发布,通过对话题加锁保证线程安全。
订阅者分为以下几种:1.用于检测话题数据更新,并导出话题数据(export)2.用于将话题数据放在队列中,防止消息丢失(queue/fifo)3.存放用户注册的回调函数,在对应话题发布消息时调用(同步方式获取数据/suber_callback)4.用于连接两个话题,源话题发布消息时转发到目标话题上(link)
几乎所有API都提供动态/静态内存分配两种接口,静态需要用户手动创建数据结构体,并保证变量一直存活,而且无法对其使用删除相关的API。
PS:不定长消息为实验功能,强烈建议每个话题的消息长度为定长。
## 文档
> [配置文件](https://github.com/Jiu-xiao/OneMessage/blob/master/doc/config.md)
> [使用说明](https://github.com/Jiu-xiao/OneMessage/blob/master/doc/user.md)
> [开发文档](https://github.com/Jiu-xiao/OneMessage/blob/master/doc/dev.md)
## 系统支持
已在Linux,FreeRTOS,ThreadX上成功运行,欢迎适配到其他平台。
* 简单示例
* [example for linux(use cmake)](https://gitee.com/jiu-xiao/msg-example.git)
* [example for stm32f103(use makefile)](https://gitee.com/jiu-xiao/om-example-mcu.git)
* 使用本框架的开源项目
* [XRobot](https://github.com/xrobot-org/XRobot):FreeRTOS/Linux/裸机
* [Shenzhen-innoX-2024wc-referembedded](https://github.com/RM-camp-for-high-school-students/Shenzhen-innoX-2024wc-referembedded):ThreadX
## 特性
* 发布-订阅
* 底层由红黑树+链表实现,查找与遍历都有良好的性能表现
* 话题为操作的主体,匿名发布且不限制订阅者数量
* 支持零拷贝发布
* 订阅者可开启内置队列,防止消息丢失
* 安全性
* 保证线程安全
* 允许在中断中使用
* 提供静态API,可以实现无动态内存分配
* 单元测试覆盖所有功能
* 消息过滤器
* 支持为每个话题和订阅者注册过滤器,只接受符合条件的消息
* 订阅回调
* 订阅者可在接收时调用用户回调函数,暂存数据或者转发到另一个话题。
* 快速配置
* 使用格式化输入的方式配置话题,极少的代码量就能实现整个消息网络的搭建
* 事件触发
* 以订阅为核心的事件触发器,在保证执行效率的同时,一个触发条件可以对应多个处理函数。
* 批量筛选
* 对于条件简单且分支较多的话题,可开启高级过滤器而不需要注册大量函数,现已支持 `列表`、`范围`、`分解`模式。例如针对id筛选CAN总线数据,或者将结构体拆分后发布。
* 话题共享
* 提供topic数据打包与解析api,可通过任意协议共享多个topic数据,实现跨进程和跨设备通信。通过fifo与crc校验保证数据完成性,在拆包/组包/错位和夹杂无效数据的情况下也能确保正确解析。
* 日志框架
* 使用示例程序打印的日志:![效果](img/log.png)
## 获取源码
克隆这个仓库
[Gitee](https://gitee.com/jiu-xiao/one-message.git)
[Github](https://github.com/Jiu-xiao/OneMessage.git)
```shell
git clone https://github.com/Jiu-xiao/OneMessage.git
```
或者使用 `git submodule`将其包含在你的仓库中
```shell
git submodule add https://github.com/Jiu-xiao/OneMessage.git <path>
```
## 代码结构
```c
OneMessage
├─config
├─src
│ ├─app
│ ├─comp
│ └─core
└─test
```
| 文件夹 | 功能 |
| -------- | ------------ |
| config | 配置文件模板 |
| doc | 文档 |
| src/app | 应用 |
| src/comp | 组件 |
| src/core | 核心api |
| src | 用户接口 |
| test | 单元测试 |
| example | 例程 |
## C++
C++兼容层[OneMessageCPP](https://github.com/Jiu-xiao/OneMessageCPP)
没有合适的资源?快使用搜索试试~ 我知道了~
一个基于发布-订阅模型的多线程消息框架,用于嵌入式平台,纯C实现,性能和灵活性极高.zip
共47个文件
h:17个
c:16个
md:4个
需积分: 5 4 下载量 47 浏览量
2024-03-17
11:42:09
上传
评论
收藏 110KB ZIP 举报
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
资源推荐
资源详情
资源评论
收起资源包目录
一个基于发布-订阅模型的多线程消息框架,用于嵌入式平台,纯C实现,性能和灵活性极高.zip (47个子文件)
资料总结
CMakeLists.txt 1KB
.clangd 3KB
.github
workflows
cmake.yml 1KB
.clang-format 58B
doc
dev.md 115B
user.md 20KB
config.md 3KB
src
CMakeLists.txt 611B
comp
om_crc.h 357B
om_fifo.h 1KB
om_rbt.h 893B
om_list.h 2KB
om_fifo.c 7KB
om_color.c 581B
om_crc.c 2KB
om_list.c 1KB
om_rbt.c 8KB
om_color.h 1KB
app
om_com.c 6KB
om_afl.h 2KB
om_fmt.c 8KB
om_afl.c 4KB
om_evt.c 2KB
om_evt.h 1KB
om_msg.h 2KB
om_log.h 2KB
om_log.c 2KB
om_msg.c 6KB
om_com.h 2KB
om_fmt.h 377B
om.h 255B
core
om_core.c 6KB
om_core.h 3KB
om_def.h 1KB
om_lib.h 163B
om.c 160B
LICENSE 11KB
cmake
FindCheck.cmake 2KB
img
log.png 75KB
test
om_test_module.c 14KB
CMakeLists.txt 737B
om_test_base.c 3KB
om_test_main.c 544B
om_test.h 103B
.gitignore 71B
README.md 5KB
config
om_config_template.h 2KB
共 47 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功