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