全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > MEMS传感器 >

框架解耦神器—REventBus

时间:2023-06-06 16:44

人气:

作者:admin

标签: REvent  解耦  神器  框架   

导读:在实际的项目开发中,经常会遇到业务与业务,组件与组件,业务与组件之间的通信,举个例子:当有烟雾传感器检测到烟雾超标时,需要打开排气扇排气,同时显示烟雾浓度显示到显...

REventBus背景

在实际的项目开发中,经常会遇到业务与业务,组件与组件,业务与组件之间的通信,举个例子:当有烟雾传感器检测到烟雾超标时,需要打开排气扇排气,同时显示烟雾浓度显示到显示器中,供管理人员检视。处理这样的逻辑有几种策略。如下:

  1. 排气扇任务和显示器任务,不断的查询烟雾浓度,各自处理检测烟雾浓度是否超标。
  2. 烟雾模块提供注册监听接口,排气扇任务和显示器任务分别注册监听,当浓度超标时,告知监听任务。

以上两种策略都存在很大的问题,问题分析:

  1. 第一种策略,每一个任务都需要不断检查判断,这会导致资源的浪费,而且代码也会有很多重复的。
  2. 第二种策略,虽然解决了第一种策略的的问题,但是如果场景中存在不止一个传感器时,那么所需要注册的监听接口将随之增加。而且监听接口是跟具体的业务绑定的。

综上所述:为了能够解决上面的问题,REventBus组件应运而生。

REventBus工作流程图解

Publisher使用publish发出ige一个事件,Subscriber在其回调函数中接收事件。

REventBus依赖组件

为了提供更好的组件化,风火轮科技 和《Rice嵌入式开发技术分享》公众号联合推出R组件集,REventbus组件就是R组件集的其中一员,组件与组件之后存在依赖关系.

REventBus组件同样依赖一些组件,如下:

  1. RPlatform组件:平台适配层,为了能让R组件能够在不同RTOSLinux中运行,针对不同平台做的适配层。
  2. RThread_pool组件: 一个跨平台,易移植,接口简单的线程池组件。

REventBus的使用

  • REventBus整体包含5部分:Subscribe,Publish,Event,EventCb,Broker。
  • Subscribe --订阅者订阅自己需要监听的事件接口。
  • Publish --发布者发布事件,它支持同步发送和异步发送。
  • Event --订阅者监听的事件,只有存在订阅事件,才会有与之对应的发布事件。
  • EventCb --事件产生的回调接口,订阅者注册,发布者发布对应事件之后产生回调。
  • Broker --事件代理,管理事件注册,注销,监听。
REventBus接口说明

1.jpg

  • REventBus初始化接口
  • 使用RThread_pool组件创建一个线程池
  • 创建互斥量,解决共享资源问题。
  • 初始化broker链表,用于事件代理。
pf_err_t reb_init(void);
  • REventBus去初始化接口
  • 线程池注销,互斥量伤处,
pf_err_t reb_deinit(void);
  • REventBus订阅事件接口: pf_err_t reb_subscribe(const char *event, reb_handler_cb handler)

1.jpg

  • REventBus订阅事件接口: pf_err_t reb_unsbscribe(const char *event, reb_handler_cb handler)

1.jpg

  • REventBus同步发布事件接口:pf_err_t reb_publish(const char *event, void *payload, uint16_t lenght)

1.jpg

  • REventBus异步发布事件接口:pf_err_t reb_async_publish(const char *event, reb_priority priority, void *payload, uint16_t lenght)
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信