ESP32-C3, esp-idf 4.3.5,esp_event_handler_instance_register第一个参数都有哪些填写方式
时间: 2024-02-15 08:05:05 浏览: 50
`esp_event_handler_instance_register`函数的第一个参数是一个`esp_event_base_t`类型的事件基础结构体,用于标识事件的类型。`esp_event_base_t`结构体包含两个成员变量:`char* event_base`和`int32_t event_id_start`。
在使用`esp_event_handler_instance_register`函数时,可以使用以下两种方式填写第一个参数:
1. 使用已定义的事件基础结构体
如果已经在代码中定义了事件基础结构体,则可以直接使用该结构体作为第一个参数。例如:
```
static const char *TAG = "example";
static const int EXAMPLE_EVENT_BASE = ESP_EVENT_BASE_ID_USER;
ESP_EVENT_DEFINE_BASE(EXAMPLE_EVENT_BASE, TAG);
...
ESP_ERROR_CHECK(esp_event_handler_instance_register(EXAMPLE_EVENT_BASE, ESP_EVENT_ANY_ID, &example_handler, NULL, &example_handler_instance));
```
在这个例子中,我们定义了一个名为`EXAMPLE_EVENT_BASE`的事件基础结构体,它的事件类型为用户自定义事件。然后,我们使用该事件基础结构体作为第一个参数调用`esp_event_handler_instance_register`函数。
2. 使用动态创建的事件基础结构体
如果没有已定义的事件基础结构体,可以使用`ESP_EVENT_DECLARE_BASE`宏动态创建事件基础结构体。例如:
```
ESP_EVENT_DECLARE_BASE(EXAMPLE_EVENT_BASE, "example");
...
ESP_ERROR_CHECK(esp_event_handler_instance_register(EXAMPLE_EVENT_BASE, ESP_EVENT_ANY_ID, &example_handler, NULL, &example_handler_instance));
```
在这个例子中,我们使用`ESP_EVENT_DECLARE_BASE`宏动态创建了一个名为`EXAMPLE_EVENT_BASE`的事件基础结构体,它的事件类型为`"example"`。然后,我们使用该事件基础结构体作为第一个参数调用`esp_event_handler_instance_register`函数。