Программирование ARM ESP-IDF: получение времени компиляции проекта в формате Unix Sat, December 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


ESP-IDF: получение времени компиляции проекта в формате Unix Печать
Добавил(а) microsin   

Значение метки времени может понадобиться для принятия решения о необходимости обновления текущей прошивки устройства. Описание даты и времени прошивки в текстовом формате можно получить вызовами функций esp_ota_get_running_partition и esp_ota_get_partition_description [4].

Ниже приведен фрагмент кода, который позволяет получить 64-битную метку времени в формате метки времени Unix [3] (unix timestamp, абсолютное системное время в миллисекундах).

// В ESP-IDF v4.4.1 тип time_t 32-разрядный, а в v5.0.1 64-разрядный [1].
// Поэтому пришлось добавить новый тип как замену для time_t:
#if (ESP_IDF_VERSION == ESP_IDF_VERSION_VAL(4, 4, 1))
   typedef int64_t ttime;
#elif (ESP_IDF_VERSION == ESP_IDF_VERSION_VAL(5, 0, 1))
   typedef time_t ttime;
#endif
 
// Функция преобразует текстовые значения времени и даты
// в числовое значение с помощью функции strptime [2].
// Здесь strtime это строка в формате "hh:mm:ss",
// а strdate это строка в формате "Месяц число год".
static ttime gettimedata (char *strtime, char *strdate)
{
   struct tm ota_tm;
   memset(&ota_tm, 0, sizeof(ota_tm));
   strptime(strtime, "%T",&ota_tm);
   strptime(strdate, "%b %d %Y",&ota_tm);
   // Преобразование количества секунд в количество миллисекунд:
   return 1000 * (ttime)mktime(&ota_tm);
}
 
// Извлечение текстовых значений времени и даты, и преобразование
// их в 64-битную метку времени Unix:
static ttime current_version_time (void)
{
   esp_app_desc_t running_app_info;
   const esp_partition_t *running = esp_ota_get_running_partition();
   esp_ota_get_partition_description(running, &running_app_info);
   return gettimedata(running_app_info.time, running_app_info.date);
}

[Ссылки]

1. ESP-IDF System Time.
2. strptime(): преобразование строки в дату/время.
3. Что такое "unix time stamp"?
4. ESP32: обновление по радиоканалу (OTA).

 

Добавить комментарий


Защитный код
Обновить

Top of Page