Add reusable firmware info module

This commit is contained in:
2026-08-30 07:01:35 +03:00
parent 05863db2a2
commit 9ce32b56d4
14 changed files with 331 additions and 1 deletions

27
c/firmware-info/README.md Normal file
View File

@@ -0,0 +1,27 @@
# Firmware Info
Переносимая библиотека версии реально запущенной прошивки. Повторяет контракт
`FirmwareInfo` из `john103C6T6NewVer`, но оформлена как template: ядро не знает
ни о HAL, ни о конкретном протоколе, ни о модели МК.
Контракт v1 содержит 12 слов: версия контракта, `major.minor.patch`, дата/время
компиляции и 8-символьный build ID. `firmware_info_to_registers()` подходит для
Modbus, `firmware_info_to_le_bytes()` — для SETGUI и других byte-протоколов.
## Подключение
1. Добавьте `include`, `src/firmware_info.c` и `src/firmware_info_port.c`.
2. Скопируйте подходящий `ports/<mcu>/firmware_info_config.template.h` в проект
как `firmware_info_config.h` и задайте SemVer.
3. Добавьте каталог с config и `include` в include path.
4. Перед сборкой запустите `tools/make_build_id.ps1`; каталог generated также
должен быть в include path. Чистая сборка получает 8 знаков git commit,
dirty-сборка — 7 знаков и `+`, сборка без Git — `NOGIT000`.
Готовые конфигурации есть для STM32F1, STM32F4, STM32G4 и К1921ВК028. Порт не
содержит регистров МК: стандартные `__DATE__`/`__TIME__` одинаковы для GCC,
Arm Compiler 5/6 и Clang. Поэтому добавление следующего МК требует только
config, а не дублирования ядра.
KONOR публикует эти 24 байта ответом `FIRMWARE_INFO (0x03)`, сохраняя старый
32-байтовый `DEVICE_INFO` без изменений.