Я работаю над MCU, и моя цель - реализовать время/дату на MCU.Реализация времени/даты на MCU
Я использую таймер, который тикает в секундах и сохраняет его на uint32_t count
, который имеет достаточный размер для хранения 136 лет. Я хочу иметь 2000 в качестве эталона и не более должно быть 2099.
вот мои данные структура:
typedef struct
{
uint8_t sec; // Seconds. [0-60] (1 leap second)
uint8_t min; // Minutes. [0-59]
uint8_t hour; // Hours. [0-23]
uint8_t day; // Day. [1-31]
uint8_t month; // Month. [0-11]
uint8_t year; // Year - from 2000. [00-99]
} osal_time_t;
Что такое лучший способ преобразовать секунды (uint32_t count
) в мин/час/день/месяц/год правильно и используя самые низкие ресурсы?
Время, час и год кажутся простыми, но день становится сложным с 28-29-30-31 днями, а 29 лет каждые 4 года.
Я вижу реализацию исходного кода linux, но я думаю, что он разработан для ОС, а не из скромного MCU.
Может кто-нибудь намекнуть, какой алгоритм следует использовать в MCU, чтобы он требовал мин. Ресурсы?
В качестве примера, какой алгоритм используется для вычисления этого http://www.mathcats.com/explore/elapsedtime.html
Если у вас есть какие-либо фрагмент кода, я был бы признателен, если вы могли бы поделиться.
Я хотел бы указать, что вы можете получать модули RTC (часы реального времени) за гроши на ebay, которые реализуют очень простые коммуникационные интерфейсы и обычно имеют слот для батареи, который будет держать их в течение многих лет, даже если MCU выключен. –
Можете ли вы не просто использовать библиотеку времени C? http://www.tutorialspoint.com/c_standard_library/time_h.htm – DiBosco
Пахнет проблемой X-Y. Зачем вам нужно конвертировать секунды во времени + дата + год и кому это нужно? – user3528438