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:不定长消息为实验功能,强烈建议每个话题的消息长度为定长。
文档
系统支持
已在Linux,FreeRTOS,ThreadX上成功运行,欢迎适配到其他平台。
- 简单示例
- 使用本框架的开源项目
- XRobot:FreeRTOS/Linux/裸机
- Shenzhen-innoX-2024wc-referembedded:ThreadX
