ESP-IDF中的event loop library事件循环库

news2024/9/27 15:20:45

文章目录

  • 简介
  • 事件循环库的使用
    • 示例:

简介

Event Loop Library是一种信号传递机制,事件循环库允许组件声明事件,其他组件可以向其注册处理程序——当这些事件发生时将执行的代码。这允许松散耦合的组件将所需的行为附加到其他组件的状态更改,而无需应用程序参与。这也通过将代码执行序列化和延迟到另一个上下文来简化事件处理。
假设现在有A B C三个线程,A B C中的某个标志位发生变化时分别进行相应的处理,这样每个线程只能处理自己所关注的标志位,并且当多个标志位发生变化需要组合处理时,这种方式不能够满足需求了,需要使用事件循环库。现在引入线程D,用于检测A B C 三个线程中标志位的变化,当发生一个事件或多个事件的时候能够分别处理或者同时处理。提高程序耦合性和可读性,与FreeRTOS中的事件组类似,不知道为什么没有直接使用事件组,可能是事件循环库中可以定义默认用于WIFI蓝牙以及IP等系统事件。

事件循环库的使用

  1. 用户定义一个事件处理函数,该函数应在事件注册到事件循环时运行。
    函数定义如下:
typedef void (*esp_event_handler_t)(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
  1. 使用esp_event_loop_create()创建事件循环,返回值为循环的句柄esp_event_loop_handle_t。使用此 API 创建的事件循环称为用户事件循环。除此之外还有一种特殊类型的事件循环称为系统默认事件循环,使用esp_event_loop_create_default()创建
    函数原型如下:
esp_err_t esp_event_loop_create(const esp_event_loop_args_t* event_loop_args, esp_event_loop_handle_t* event_loop)
  1. 组件使用esp_event_handler_register_with()将事件注册到循环中。可以在多个循环中注册处理程序。
    系统默认事件使用esp_event_handler_register()
esp_err_t esp_event_handler_register_with(esp_event_loop_handle_t event_loop,        esp_event_base_t event_base,
                                        int32_t event_id, esp_event_handler_t event_handler, void* event_handler_arg)
  1. 事件源(发生事件的地方)使用esp_event_post_to()将事件发布到事件循环。

  2. 想要从调用中删除其处理程序的组件可以通过使用esp_event_handler_unregister_with()从循环中注销来实现。

  3. 不再需要的事件循环可以使用删除esp_event_loop_delete()

用户使用的API和系统默认事件的API区别:

用户事件循环默认事件循环
esp_event_loop_create()esp_event_loop_create_default()
esp_event_loop_delete()esp_event_loop_delete_default()
esp_event_handler_register_with()esp_event_handler_register()
esp_event_handler_unregister_with()esp_event_handler_unregister()
esp_event_post_to()esp_event_post()

示例:

这是smart_config示例代码,因为使用的是系统事先定义好的事件,所以第4步被隐藏在系统级函数中了
20230504122950

下面是事件处理函数:
通过if else结构判断事件作相应的处理
20230504123345

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试(20222023)真题目录 + 考点 + 通过率

目录 华为OD机试是什么?华为OD面试流程?华为OD机试通过率高吗?华为OD薪资待遇?华为OD晋升空间?华为OD刷题列表,一天三题,刷出算法新高度,刷出人生新际遇。 大家好,我是哪…

基于Hebb学习的深度学习方法总结

基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 3 SoftHebb学习算法3.1 WTA(Winner Take All)3.2 SoftHebb3.3 多层Hebb网络3.4 Hebb学习的性能测评 参考文献 0 引言 总所周知,反向传播算法(back-propagating, BP&…

你想要的【微前端】都在这里了! | 京东云技术团队

作者:京东零售 郑炳懿 开篇: 如果你不知道微前端是什么,或者不知道微前端能解决什么问题,那么你可能不需要微前端。 在我看来,对于每一个没有使用过的新技术,都应该有以下几个过程: 1、调研…

【Android签名文件META-INF】

android安装包apk中,有一个META-INF文件夹,该文件夹下面必须有以下几个扩展名的文件:.SF,.RSA,*.MF。一般为MANIFEST.MF,包名.SF,包名.RSA(也有可能是EC或者DSA)。 其中…

聊聊ClickHouse向量化执行引擎-过滤操作

俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库,其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data,即ColumnVector::data,存放数据 2、使用uint8类型&#xf…

Metasploit渗透测试:工作区使用帮助

目录 ​编辑 help 查看工作区 添加工作区 显示工作区详情

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究&#xff…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(中)》

案例分析 - 计算题(中) 章节其他部分3 成本管理3.1 挣值分析3.1.1 概念3.1.2 公式3.1.3 参数关系3.1.4 题目 3.2 挣值管理3.3 预测3.3.1 ETC(完成尚需估算)3.3.2 EAC(完工估算)3.3.3 BAC(完工预算) 3.4 绩效审查 章节其他部分 案例分析 - 计算题&#x…

27从零开始学Java之详解复杂的二维数组与多维数组

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前几篇文章中,壹哥给大家介绍了Java里的一维数组,涉及到了数组的创建初始化…

黑马程序员Dubbo快速入门,Java分布式框架dubbo教程

分布式系统中的相关概念 (一)互联网项目架构目标-特点 (二)互联网项目架构目标-目标 (三)集群和分布式 (四)架构演进 Dubbo概述 (一)dubbo概述 1、dub…

Oracle 修改 sga_target 参数设置,虚拟内存值设置

记录一次Oracle数据库单实例维护里程。 数据库启动报错 sga_target参数设置太小,导致数据库无法启动,这种情况下需要修改数据库的spfile的sga_target参数 修复过程如下。 1、启动报错 2、根据spfile 创建pfile 文件。 create pfile‘/app/oracle/i…

项目经理在项目中是什么角色?

有人说,项目经理就是一个求人的差事,你是在求人帮你做事。 有人说,项目经理就是一个与人扯皮的差事,你要不断的与开发、产品、测试等之间沟通、协调。 确实,在做项目的时候,有的人是为了完成功能&#x…

MYSQL基本操作(增删改查)

数据库的列类型 int:整型 用于定义整数类型的数据 float:单精度浮点4字节32位 准确表示到小数点后六位 double:双精度浮点8字节64位 char:固定长度的字符类 用于定义字符类型数据&…

防抖节流(回顾)

防抖定义应用场景:实现思路:_.debounce 源码 节流定义应用场景:实现思路:_.throttle 防抖和节流的区别scroll 事件下的区别mousemove 事件下的区别 防抖 定义 强制函数在固定时间只执行一次,多余执行无效 应用场景&…

Node 10 接口

接口 简介 接口是什么 接口是 前后端通信的桥梁 简单理解:一个接口就是 服务中的一个路由规则 ,根据请求响应结果 接口的英文单词是 API (Application Program Interface),所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…

企业如何通过CRM系统有效触达客户,获取潜在商机

“守株待兔”式坐等客户上门的时代了已经过去了,尤其是在存量时代,企业想要提高销售,扩大客源,就要不断的通过各种渠道来去拓展自己的客户和销路,而互联网时代,获客的渠道也丰富多样,企业选择好…

权威重磅:全球区块链专利状况研究

文 | 国家知识产权局知识产权发展研究中心 区块链(Blockchain)是一种安全共享的去中心化的数据账本。近年来,区块链与大数据、云计算、人工智能、5G等新一代信息技术快速融合发展,应用已延伸到数字金融、物联网、智能制造、供应链…

Java面试题总结 | Java面试题总结11- Spring模块(持续更新)

Spring 文章目录 Spring什么是SpringSpringMVC、Spring、SrpingBoot的区别SSM和SpringBoot的区别IOC容器Spring Boot Starter有什么用SpringBoot启动原理说说你对AOP的理解spring用到的设计模式Spring是怎么解决循环依赖的?说说你对MVC的理解spring mvc执行流程什么…

CRM系统云部署和本地部署的优缺点有哪些

CRM客户管理系统有两种部署方式,分别是本地部署和云端部署。每一种部署方式都有相应的优势和劣势。下面我们就来说说,CRM本地部署和CRM云部署有哪些区别? 本地部署 CRM本地部署是指将CRM软件安装在企业自己的服务器上,这些服务器…

做电商数据分析可视化,这个国产BI软件很香

电商数据分析的数据采集整合工作量大,对实时性要求高,特别是跨境电商物流周期长不利于做库存计划不说,还容易出现运营、物流、财务、生产信息脱节等情况。难,但难不倒国产BI软件。在国内外BI软件中,国产BI软件明显更具…