Перенесена из k1921vk028/1921vk028/lib/rtc_service. Ядро rtc_service_core.c зависит только от stddef, string и собственных заголовков; доступ к часам и backup-памяти вынесен в rtc_service_port.h. Порт для K1921VK028 идёт в комплекте и служит образцом для следующего МК.
2.4 KiB
2.4 KiB
HELP — RTC Service
Что делает модуль
Поддерживает:
- инициализацию RTC;
- валидацию даты/времени;
- сохранение последнего корректного времени в резервной области NVR;
- восстановление времени после перезагрузки по backup-данным.
API
RtcService_Result RtcService_Init(const RtcService_InitConfig* cfg, RtcService_Status* status);
RtcService_Result RtcService_GetDateTime(RtcService_DateTime* dt);
RtcService_Result RtcService_SetDateTime(const RtcService_DateTime* dt);
const char* RtcService_ResultToText(RtcService_Result res);
Пример использования
RtcService_InitConfig cfg = {
.preferred_clock_source = RTC_SERVICE_CLOCK_SOURCE_AUTO,
.fallback_datetime = {
.year = 25, .month = 1, .day = 1,
.weekday = 2, .hour = 12, .minute = 0, .second = 0
}
};
RtcService_Status status = {0};
RtcService_Result res = RtcService_Init(&cfg, &status);
RtcService_DateTime now;
if (RtcService_GetDateTime(&now) == RTC_SERVICE_RESULT_OK) {
// now готов для чтения полей
}
Конфигурация
- Выберите
RtcService_InitConfig:preferred_clock_source— пока рекомендуетсяRTC_SERVICE_CLOCK_SOURCE_AUTO;fallback_datetime— базовая дата на случай первого старта/коррупции.
- Передайте структуру в
RtcService_Init. - Используйте
RtcService_GetDateTimeдля получения времени. - Для установки времени —
RtcService_SetDateTime.
Коды ошибок
RtcService_ResultToText возвращает строку:
OKINVALID_ARGUMENTINVALID_DATETIMEHW_NOT_SUPPORTEDBACKUP_CORRUPTBACKUP_UNAVAILABLEFAILED
Ограничения
- Проверка флага power-on reset в текущей платформенной части пока заглушка;
если нужно строгое поведение, в
rtc_service_port_k1921vk028.cдобавить чтение реестра причины сброса/статуса. - Выбор LSE/LSI на текущий момент реализован как
UNSUPPORTEDдо появления подходящего HAL-подхода.