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

45
c/rtc-service/PORTING.md Normal file
View File

@@ -0,0 +1,45 @@
# PORTING — RTC Service
## Что переносить
Библиотека строится как:
- переносимое ядро (`rtc_service_core.c`) — без зависимостей от HAL/реестров;
- порт (`rtc_service_port_k1921vk028.c`) — конкретные вызовы `plib028`.
## Шаги переноса на другой MCU
1. Создать новый `rtc_service_port_*.c` (и при необходимости `_port.h`).
2. Реализовать все функции из `rtc_service_port.h`:
- `RtcService_Port_InitClock`
- `RtcService_Port_EnableRtcClock`
- `RtcService_Port_IsPowerOnReset`
- `RtcService_Port_ReadRtc`
- `RtcService_Port_WriteRtc`
- `RtcService_Port_ReadBackup`
- `RtcService_Port_WriteBackup`
- `RtcService_Port_EraseBackup`
3. Собрать таблицу соответствий:
- форматы времени;
- единицы дня/месяца/года;
- адреса backup-области и ограничения размера.
4. Пройти чеклист:
- `RtcService_Init` с cold-reset и warm-reset;
- сценарий power-on без сохранённого backup;
- проверка CRC/валидности;
- задание корректной даты при запуске;
- корректная работа `RtcService_SetDateTime`.
## Что считать обязательным
- Выделить RAM/flash под backup-blob как минимум на 16 слов.
- Обеспечить атомарность записи backup (erase+write/защита от разрыва).
- Поддержать код возврата:
- ошибки портов;
- недоступность storage;
- отсутствие флага инициализации.
## Рекомендуемые расширения
- Реальное определение режима источника (`LSE`/`LSI`/`AUTO`).
- Реальная детекция `power-on reset`.
- Таймауты доступа к Flash.