Перенесена из 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-подхода.
|