Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4630
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2021-06-07 17:12
个人简介

对嵌入式、QT、桌面开发感兴趣

文章分类
文章存档

2022年(16)

我的朋友
最近访客

分类: 嵌入式

2022-10-08 14:32:29


  1. #include "esp_log.h"
  2. #include "esp_event.h"
  3. #include "freertos/FreeRTOS.h"
  4. #include "freertos/task.h"

  5. static const char *TAG = "demo";

  6. ESP_EVENT_DECLARE_BASE(EVENT_BASE);
  7. ESP_EVENT_DEFINE_BASE(EVENT_BASE);

  8. enum {
  9.     EVENT_ID_1
  10. };

  11. static void
  12. app_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {
  13.     ESP_LOGW(TAG, "Before");
  14.     vTaskDelay(500 / portTICK_PERIOD_MS);
  15.     ESP_LOGW(TAG, "After");
  16. }

  17. void app_main(void) {
  18.     ESP_LOGI(TAG, "Start Demo");
  19.     esp_event_loop_create_default();
  20.     esp_event_handler_register(EVENT_BASE, EVENT_ID_1, app_event_handler, NULL);
  21.     ESP_LOGE(TAG, "Start");
  22.     esp_event_post(EVENT_BASE, EVENT_ID_1, NULL, 0, 500 / portTICK_RATE_MS);
  23.     ESP_LOGE(TAG, "End");
  24. }
执行结果

可见在响应代码执行完毕之前 esp_event_post() 函数已经返回。
分析代码 esp_event_post() -> esp_event_post_to() 简化代码如下:
p, li { white-space: pre-wrap; }hr { height: 1px; border-width: 0; }
  1. esp_err_t esp_event_post_to()
  2. {
  3.     esp_event_post_instance_t post;
  4. ...
  5.     xQueueSendToBack(loop->queue, &post, ticks_to_wait);
  6. ...
  7.     post_instance_delete(&post);
  8. ...
  9.     return ESP_OK;
  10. }
可见 esp_event_post() 最终是将事件相关参数传送到事件循环对象的队列里面就返回了

阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~