Я новичок в C и, очевидно, у меня проблемы: D
Я хочу привести void*
к структуре. Вот мой код:
struct temp_config {
float min_temp;
float max_temp;
};
temp_config temp_config_ = {
.min_temp = 22.0,
.max_temp = 27.0,
};
void on_temp_conf_update(void* handler_args, esp_event_base_t base, int32_t event, void* event_data) {
temp_config *temp_config_ = (struct temp_config*)event_data;
ESP_LOGI(CONFIG_LOG_TAG, "CONF MAX TEMP %f", temp_config_->max_temp);
ESP_LOGI(CONFIG_LOG_TAG, "CONF MIN TEMP %f", temp_config_->min_temp);
}
Результат temp_config_->max_temp
равен -0.001322
А результат temp_config_->min_temp
равен 1.977762
Я хотел бы понять, почемурезультаты не совпадают.
Большое спасибо за вашу помощь:)
РЕДАКТИРОВАТЬ
Подробнее:
Здесьlamba, где я инициализирую структуру и отправляю событие:
server.on("/api/temp", HTTP_POST, [](AsyncWebServerRequest *request){
if (!request->hasParam("max_temp", true) && !request->hasParam("max_temp", true)) {
request->send(400, "application/json", "{\"message\": \"min_temp and max_temp are required\"}");
return;
}
temp_config temp_config_ = {
.min_temp = atof(request->getParam("min_temp", true)->value().c_str()),
.max_temp = atof(request->getParam("max_temp", true)->value().c_str()),
};
event_loop_dispatch(MG_EVENT_CONF_TEMP_MUST_UPDATE, &temp_config_);
request->send(200, "application/json", "{\"message\": \"temp_updated\"}");
});
здесь определение event_loop_dispatch
void event_loop_dispatch(mg_event event, void* event_data) {
esp_event_post_to(mg_events_loop, MG_EVENTS, event, &event_data, sizeof(event_data), portMAX_DELAY);
}
и вот, обработчик события:
void on_temp_conf_update(void* handler_args, esp_event_base_t base, int32_t event, void* event_data) {
ESP_LOGI(CONFIG_LOG_TAG, "temperature conf must update");
temp_config *temp_config_ = (struct temp_config*)event_data;
ESP_LOGI(CONFIG_LOG_TAG, "CONF MAX TEMP %f", temp_config_->max_temp);
ESP_LOGI(CONFIG_LOG_TAG, "CONF MIN TEMP %f", temp_config_->min_temp);
}