feat(rtc-service): служба RTC с резервированным backup-томом

Перенесена из k1921vk028/1921vk028/lib/rtc_service.

Ядро rtc_service_core.c зависит только от stddef, string и собственных
заголовков; доступ к часам и backup-памяти вынесен в rtc_service_port.h.
Порт для K1921VK028 идёт в комплекте и служит образцом для следующего МК.
This commit is contained in:
2026-08-23 01:15:36 +03:00
parent 3dc636e012
commit 34cbd92808
9 changed files with 774 additions and 0 deletions

68
c/rtc-service/HELP.md Normal file
View File

@@ -0,0 +1,68 @@
# HELP — RTC Service
## Что делает модуль
Поддерживает:
- инициализацию RTC;
- валидацию даты/времени;
- сохранение последнего корректного времени в резервной области NVR;
- восстановление времени после перезагрузки по backup-данным.
## API
```c
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);
```
## Пример использования
```c
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);
```
```c
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-подхода.