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:
68
c/rtc-service/HELP.md
Normal file
68
c/rtc-service/HELP.md
Normal 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-подхода.
|
||||
Reference in New Issue
Block a user