Перенесена из k1921vk028/1921vk028/lib/rtc_service. Ядро rtc_service_core.c зависит только от stddef, string и собственных заголовков; доступ к часам и backup-памяти вынесен в rtc_service_port.h. Порт для K1921VK028 идёт в комплекте и служит образцом для следующего МК.
46 lines
2.0 KiB
Markdown
46 lines
2.0 KiB
Markdown
# 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.
|