Files
templates/c/rtc-service/HELP.md
Andrey Kruchinkin 34cbd92808 feat(rtc-service): служба RTC с резервированным backup-томом
Перенесена из k1921vk028/1921vk028/lib/rtc_service.

Ядро rtc_service_core.c зависит только от stddef, string и собственных
заголовков; доступ к часам и backup-памяти вынесен в rtc_service_port.h.
Порт для K1921VK028 идёт в комплекте и служит образцом для следующего МК.
2026-08-23 01:15:36 +03:00

2.4 KiB
Raw Blame History

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 готов для чтения полей
}

Конфигурация

  1. Выберите RtcService_InitConfig:
    • preferred_clock_source — пока рекомендуется RTC_SERVICE_CLOCK_SOURCE_AUTO;
    • fallback_datetime — базовая дата на случай первого старта/коррупции.
  2. Передайте структуру в RtcService_Init.
  3. Используйте RtcService_GetDateTime для получения времени.
  4. Для установки времени — RtcService_SetDateTime.

Коды ошибок

RtcService_ResultToText возвращает строку:

  • OK
  • INVALID_ARGUMENT
  • INVALID_DATETIME
  • HW_NOT_SUPPORTED
  • BACKUP_CORRUPT
  • BACKUP_UNAVAILABLE
  • FAILED

Ограничения

  • Проверка флага power-on reset в текущей платформенной части пока заглушка; если нужно строгое поведение, в rtc_service_port_k1921vk028.c добавить чтение реестра причины сброса/статуса.
  • Выбор LSE/LSI на текущий момент реализован как UNSUPPORTED до появления подходящего HAL-подхода.