Приведите void *, чтобы структурировать результат в неверные значения - PullRequest
1 голос
/ 11 октября 2019

Я новичок в 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);
}
...