当前位置: 首页 > wzjs >正文

哪家网站设计比较好台前网站建设电话

哪家网站设计比较好,台前网站建设电话,360网站建设搜索,营业执照注册网站目录 ESP-ADF esp_dispatcher组件之dispatcher介绍子模块概览基本功能与定位工作原理核心特性 公开接口数据类型与结构体公开函数esp_dispatcher_createesp_dispatcher_destroyesp_dispatcher_reg_exe_funcesp_dispatcher_executeesp_dispatcher_execute_asyncesp_dispatcher_e…

目录

  • ESP-ADF esp_dispatcher组件之dispatcher介绍
    • 子模块概览
      • 基本功能与定位
      • 工作原理
      • 核心特性
    • 公开接口
      • 数据类型与结构体
      • 公开函数
        • esp_dispatcher_create
        • esp_dispatcher_destroy
        • esp_dispatcher_reg_exe_func
        • esp_dispatcher_execute
        • esp_dispatcher_execute_async
        • esp_dispatcher_execute_with_func
        • esp_dispatcher_execute_with_func_async
    • 接口总结
      • 概述
      • 函数分类
        • 1. 资源管理函数
        • 2. 事件注册函数
        • 3. 事件执行函数

ESP-ADF esp_dispatcher组件之dispatcher介绍

版本信息: v2.7-65-gcf908721

子模块概览

基本功能与定位

dispatcher子模块是ESP-ADF中esp_dispatcher组件的核心部分,它提供了基础的事件调度框架,使系统能够统一管理各种事件并灵活调度执行相应的处理函数。该模块处于ESP-ADF架构的中间层,连接上层应用逻辑和底层系统服务。

ESP-dispatcher模块内部结构
ESP-ADF架构
使用
dispatcher
(核心调度框架)
delegate
(共享调度器机制)
periph_service
(外设服务抽象层)
audio_service
(音频服务抽象层)
音频Pipeline等
应用层 (App)
ESP-dispatcher模块
ESP-IDF (系统层)
硬件 (MCU)

这个综合图表展示了dispatcher子模块在整个ESP-ADF架构中的关键位置:它既是连接上下层的桥梁(ESP-dispatcher模块),也是内部的核心基础组件,为delegate、periph_service和audio_service子模块提供事件调度服务。

工作原理

dispatcher子模块基于FreeRTOS的任务和队列机制实现,它的工作原理如下:

  1. 事件注册:应用程序通过API注册事件ID和对应的处理函数
  2. 事件提交:事件发生时,通过dispatcher接口将事件放入队列
  3. 事件分发:dispatcher后台任务从队列取出事件,查找对应处理函数
  4. 执行回调:调用事件对应的处理函数,完成实际操作
  5. 结果返回:同步或异步方式将执行结果返回给调用方

核心特性

  • 统一事件处理:提供统一的事件分发机制
  • 同步/异步模式:支持同步调用和异步回调两种执行模式
  • 资源管理:自动管理任务、队列等资源的创建和销毁
  • 线程安全:使用互斥锁保证多线程环境下的安全访问
  • 可扩展性:易于注册新的事件类型和处理函数

公开接口

以下接口定义来自 /components/esp_dispatcher/include/esp_dispatcher.h

数据类型与结构体

// 调度器配置
typedef struct {int                         task_stack;             // >0 任务堆栈大小; =0 不创建任务int                         task_prio;              // 任务优先级(基于FreeRTOS优先级)int                         task_core;              // 任务运行的核心(0或1)bool                        stack_in_ext;           // 尝试在外部内存分配堆栈
} esp_dispatcher_config_t;// 调度器句柄
typedef struct esp_dispatcher *esp_dispatcher_handle_t;// 回调函数结果类型
typedef void (*func_ret_cb_t)(action_result_t ret, void *user_data);#define DEFAULT_ESP_DISPATCHER_STACK_SIZE      (4*1024)  // 默认堆栈大小
#define DEFAULT_ESP_DISPATCHER_TASK_PRIO       (10)      // 默认任务优先级
#define DEFAULT_ESP_DISPATCHER_TASK_CORE       (0)       // 默认运行核心// 调度器默认配置
#define ESP_DISPATCHER_CONFIG_DEFAULT() { \.task_stack = DEFAULT_ESP_DISPATCHER_STACK_SIZE, \.task_prio = DEFAULT_ESP_DISPATCHER_TASK_PRIO, \.task_core = DEFAULT_ESP_DISPATCHER_TASK_CORE, \.stack_in_ext = false, \
}

公开函数

esp_dispatcher_create
/*** @brief 创建ESP调度器实例** @param cfg 调度器实例的配置** @return*     - NULL,失败*     - 其他,成功*/
esp_dispatcher_handle_t esp_dispatcher_create(esp_dispatcher_config_t *cfg);
esp_dispatcher_destroy
/*** @brief 销毁ESP调度器实例** @param handle ESP调度器实例** @return*     - ESP_OK*     - ESP_ERR_INVALID_ARG*/
esp_err_t esp_dispatcher_destroy(esp_dispatcher_handle_t handle);
esp_dispatcher_reg_exe_func
/*** @brief 向ESP调度器实例注册事件索引和执行函数** @param handle          ESP调度器实例* @param exe_inst        执行实例* @param sub_event_index 事件索引* @param func            执行函数** @return*     - ESP_OK*     - ESP_ERR_ADF_ALREADY_EXISTS*     - ESP_ERR_INVALID_ARG*/
esp_err_t esp_dispatcher_reg_exe_func(esp_dispatcher_handle_t handle, void *exe_inst, int sub_event_index, esp_action_exe func);
esp_dispatcher_execute
/*** @brief 执行具有特定事件索引的函数。*        这是一个同步接口。** @param handle          ESP调度器实例* @param sub_event_index 事件索引* @param arg             执行函数的参数* @param result          执行函数的结果** @return*     - ESP_OK*     - ESP_ERR_INVALID_ARG*     - ESP_ERR_ADF_TIMEOUT, 发送请求命令超时*     - 其他,执行函数结果*/
esp_err_t esp_dispatcher_execute(esp_dispatcher_handle_t handle, int sub_event_index,action_arg_t *arg, action_result_t *result);
esp_dispatcher_execute_async
/*** @brief 执行具有特定事件索引的函数。*        这是一个异步接口。** @param handle          ESP调度器实例* @param sub_event_index 事件索引* @param arg             执行函数的参数* @param ret_cb          用于接收函数执行结果的回调* @param user_data       回调中使用的数据** @return*     - ESP_OK*     - ESP_ERR_INVALID_ARG*     - ESP_ERR_ADF_TIMEOUT, 发送请求命令超时*     - 其他,执行函数结果*/
esp_err_t esp_dispatcher_execute_async(esp_dispatcher_handle_t dh, int sub_event_index,action_arg_t *in_para, func_ret_cb_t ret_cb, void* user_data);
esp_dispatcher_execute_with_func
/*** @brief 执行具有特定事件索引的函数。*        这是一个同步接口。** @param handle          ESP调度器实例* @param sub_event_index 事件索引* @param arg             执行函数的参数* @param result          执行函数的结果** @return*     - ESP_OK*     - ESP_ERR_INVALID_ARG*     - ESP_ERR_ADF_TIMEOUT, 发送请求命令超时*     - 其他,执行函数结果*/
esp_err_t esp_dispatcher_execute_with_func(esp_dispatcher_handle_t handle, int sub_event_index,action_arg_t *arg, action_result_t *result);
esp_dispatcher_execute_with_func_async
/*** @brief 执行具有特定事件索引的函数。*        这是一个异步接口。** @param handle          ESP调度器实例* @param sub_event_index 事件索引* @param arg             执行函数的参数* @param ret_cb          用于接收函数执行结果的回调* @param user_data       回调中使用的数据** @return*     - ESP_OK*     - ESP_ERR_INVALID_ARG*     - ESP_ERR_ADF_TIMEOUT, 发送请求命令超时*     - 其他,执行函数结果*/
esp_err_t esp_dispatcher_execute_with_func_async(esp_dispatcher_handle_t dh, int sub_event_index,action_arg_t *in_para, func_ret_cb_t ret_cb, void* user_data);

接口总结

概述

ESP-ADF的dispatcher子模块提供了一套完整的事件调度接口,主要用于创建和管理调度器实例、注册事件处理函数、以及执行事件处理。这些接口设计遵循了以下原则:

  1. 资源生命周期管理:通过create/destroy函数对调度器资源进行完整生命周期管理
  2. 事件注册机制:提供注册函数将事件ID与处理函数关联
  3. 同步/异步执行模式:支持阻塞式同步调用和基于回调的异步调用
  4. 灵活的参数传递:通过通用参数结构支持不同类型的参数传递

函数分类

根据功能,dispatcher子模块的公开函数可以分为以下几类:

1. 资源管理函数
函数名功能描述
esp_dispatcher_create创建调度器实例,分配必要资源
esp_dispatcher_destroy销毁调度器实例,释放所有资源
2. 事件注册函数
函数名功能描述
esp_dispatcher_reg_exe_func注册事件索引和对应的处理函数
3. 事件执行函数
函数名执行方式特点
esp_dispatcher_execute同步基本同步执行接口,阻塞等待结果
esp_dispatcher_execute_async异步基本异步执行接口,通过回调返回结果
esp_dispatcher_execute_with_func同步扩展同步执行接口,支持更多功能
esp_dispatcher_execute_with_func_async异步扩展异步执行接口,支持更多功能

通过这些接口,应用程序可以灵活地创建事件处理机制,实现复杂的事件驱动型应用。调度器的设计使得事件处理逻辑与业务逻辑分离,提高了代码的模块化程度和可维护性。


文章转载自:

http://oWvy6emj.yrnyz.cn
http://e3viU94N.yrnyz.cn
http://gt5NKioE.yrnyz.cn
http://Ogroo0ip.yrnyz.cn
http://HdMsGbf6.yrnyz.cn
http://lGrHtR1p.yrnyz.cn
http://KtoDHzjx.yrnyz.cn
http://0ELl9yN0.yrnyz.cn
http://TsDkdnFv.yrnyz.cn
http://4cvMpvkW.yrnyz.cn
http://FCo0QvzN.yrnyz.cn
http://aq6MGcri.yrnyz.cn
http://u72yOQkI.yrnyz.cn
http://zuJkw6Bn.yrnyz.cn
http://5QVuVKdJ.yrnyz.cn
http://CwzbW3By.yrnyz.cn
http://guUaI46p.yrnyz.cn
http://PDg4UkGB.yrnyz.cn
http://VEBeHagI.yrnyz.cn
http://0l2ffhI5.yrnyz.cn
http://ZbmSb4vz.yrnyz.cn
http://FUPEdEiy.yrnyz.cn
http://KP66aIC6.yrnyz.cn
http://p8fwk5cU.yrnyz.cn
http://WCALyqw7.yrnyz.cn
http://k7IPYPaP.yrnyz.cn
http://aVub6TE8.yrnyz.cn
http://eZvFyVOH.yrnyz.cn
http://aWAvp2BQ.yrnyz.cn
http://YlHW4wDF.yrnyz.cn
http://www.dtcms.com/wzjs/674125.html

相关文章:

  • 做教程网站资源放哪里有珠海网站建设网
  • wordpress展示型外贸网站手工艺品外贸出口公司网站建设方案
  • 雄安新区做网站公司珠海网站建设
  • 网站开发个人简历户型设计软件免费
  • 济南学生网站建设求职网站内链建设的方法
  • 网站敏感字wordpress 数据库搜索
  • 有什么字体设计网站做逆战网站的名字吗
  • 哪里的网站可以做围棋死活题新泰网站建设流程
  • 深圳好的网站制作哪家快如何推广网站网站推广常用方法
  • 做网站个体户执照成都开发网站建设
  • 网站分类有哪几类wordpress的live2D
  • 网站定制哪家正规wordpress rss小工具
  • jquery 网站后台模板网站后台网址后缀
  • 南平摩托车罚款建设网站缴费海口网站建设中心
  • 怎样建设淘宝网站深圳上市公司排名
  • 二级网站建设检查评比方案wordpress 第三方支付
  • 安能建设总公司网站打不开wordpress wpenqueuestyle
  • wordpress个人博客建站系统网站建设案例教程视频
  • 网站建设能给客户带来什么搜索引擎优化基本
  • 中山精品网站建设策划书广告牌logo设计制作
  • 做好的网站怎么演示辽宁建设工程信息网工程业绩怎么上传
  • 找人做网站排名网站在那里备案
  • 网站开发与设计实训实训报告网站建设主要包括哪两个方面
  • 设计网站公司只找亿企邦wordpress汉化po
  • 百度上搜不到网站凡科建站收费价目表
  • 女性门户网站模板扬中话
  • 网站优化助手wordpress 5.01不要升级
  • 长沙商城小程序开发吉林seo网络推广
  • 专门做影评的网站营销策划公司名字简单大气
  • 做门户网站的系统苏州工业园区一站式服务中心