reventbus背景在实际的项目开发中,经常会遇到业务与业务,组件与组件,业务与组件之间的通信,举个例子:当有烟雾传感器检测到烟雾超标时,需要打开排气扇排气,同时显示烟雾浓度显示到显示器中,供管理人员检视。处理这样的逻辑有几种策略。如下:
排气扇任务和显示器任务,不断的查询烟雾浓度,各自处理检测烟雾浓度是否超标。烟雾模块提供注册监听接口,排气扇任务和显示器任务分别注册监听,当浓度超标时,告知监听任务。以上两种策略都存在很大的问题,问题分析:
第一种策略,每一个任务都需要不断检查判断,这会导致资源的浪费,而且代码也会有很多重复的。第二种策略,虽然解决了第一种策略的的问题,但是如果场景中存在不止一个传感器时,那么所需要注册的监听接口将随之增加。而且监听接口是跟具体的业务绑定的。综上所述:为了能够解决上面的问题,reventbus组件应运而生。
reventbus工作流程图解publisher使用publish发出ige一个事件,subscriber在其回调函数中接收事件。
reventbus依赖组件为了提供更好的组件化,风火轮科技 和《rice嵌入式开发技术分享》公众号联合推出r组件集,reventbus组件就是r组件集的其中一员,组件与组件之后存在依赖关系.
reventbus组件同样依赖一些组件,如下:
rplatform组件:平台适配层,为了能让r组件能够在不同rtos或linux中运行,针对不同平台做的适配层。rthread_pool组件: 一个跨平台,易移植,接口简单的线程池组件。reventbus的使用reventbus整体包含5部分:subscribe,publish,event,eventcb,broker。subscribe --订阅者订阅自己需要监听的事件接口。publish --发布者发布事件,它支持同步发送和异步发送。event --订阅者监听的事件,只有存在订阅事件,才会有与之对应的发布事件。eventcb --事件产生的回调接口,订阅者注册,发布者发布对应事件之后产生回调。broker --事件代理,管理事件注册,注销,监听。reventbus接口说明
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)
reventbus订阅事件接口: pf_err_t reb_unsbscribe(const char *event, reb_handler_cb handler)
reventbus同步发布事件接口:pf_err_t reb_publish(const char *event, void *payload, uint16_t lenght)
reventbus异步发布事件接口:pf_err_t reb_async_publish(const char *event, reb_priority priority, void *payload, uint16_t lenght)
新基建实现中国制造2025的必然选择,但能否解决当下的就业问题
小米血压手表、华为 Watch D,橙子大健康 Watch D,这几款血压手表谁更优秀?
机械的挖的坑电气要不要去填?
绕组式永磁调速系统在化学杂水泵改造中的运用
“未来之路”年度盛典在京举行 大数据人工智能加速文娱行业发展
框架解耦神器—REventBus
vivo IFEA 分离式镜头表明:智能手机镜头设计已达到百花齐放阶段
苹果为什么收购Dialog部分业务 苹果为什么要自主研发芯片
艾默生网络能源的ATCA系统可支持深层封包检测功能
镜面电视,带你体验高科技的家居生活!
ADC12QS065里用LVDS格式解决输出信号传输问题
运营商因为5G的到来有了什么改变
面对彩电市场的快速发展 企业必须拥有改革和创新的能力
通过物联网技术构成的车联网在电动车中的应用
【干货】大牛工程师手把手教你开关电源PCB排版
凤凰一号怎么样 值不值得买
创客福利来袭:多款低价Zynq SoC和Xilinx 7系列FPGA开发板
Android存在安全漏洞,5.0系统版本以上都存在,高达77.5%受影响
曝国内手机厂商将与哈苏合作
共射放大电路参数确定方案解析