У меня есть структура с именем light
, и я создаю событие кнопки, которое передает адрес структуры 'light' через параметр void *context
;
int button_create(const uint8_t gpio_num, button_config_t config, button_callback_fn callback, void* context)
Когда выполняется обратный вызов, Я могу использовать эту структуру без проблем;
void button_callback(button_event_t event, void* context) {
light_service_t *light = (light_service_t*) context;
ESP_LOGW("button_callback", "light pointer %p idx %d", light, light->idx);
}
Но мне нужно использовать функцию esp_event_post
, предоставляемую Espressif. Эта функция создает КОПИЮ данных;
memcpy(event_data_copy, event_data, event_data_size);
#if CONFIG_ESP_EVENT_POST_FROM_ISR
post.data.ptr = event_data_copy;
Итак, когда я вызываю эту функцию;
void button_callback(button_event_t event, void* context) {
// esp_event_post sends a pointer to a COPY of the data.
esp_event_post(BUTTON_EVENT, event, context, sizeof(void*), 10);
}
В обработчике событий эта строка фактически не возвращает мне оригинал адрес указателя;
} else if (event_base == BUTTON_EVENT) {
light_service_t *light = (light_service_t*) event_data;
Итак, как я могу передать адрес указателя как ... 'данные' (??), а затем успешно получить адрес в последнем обратном вызове события?