Ядро независимо
В переносимом слое нет заголовков MCU, HAL, регистров, IRQ, ОС и динамической памяти.
Единый справочник по репозиторию templates: назначение модулей, границы платформенного кода и практический маршрут переноса на новый микроконтроллер.
Повторно используемый код прошивок и инструментов. Каждая библиотека подключается отдельно и хранит состояние у вызывающей стороны.
В переносимом слое нет заголовков MCU, HAL, регистров, IRQ, ОС и динамической памяти.
SPI, GPIO, I²C, UART, CAN, Flash и часы передаются через callbacks или небольшой файл порта.
В сборку добавляются только исходники выбранной библиотеки, include-каталог и нужный порт.
board/ или port/, но не попадают в ядро.Для фиксируемой версии предпочтителен Git submodule:
git submodule add https://git.rd12.ru/Andrey/templates.git lib/templates
git submodule update --init --recursiveЕсли изменения регулярно возвращаются в библиотеку, используйте subtree:
git subtree add --prefix lib/templates https://git.rd12.ru/Andrey/templates.git master --squash
git subtree pull --prefix lib/templates https://git.rd12.ru/Andrey/templates.git master --squashПоиск работает по имени, интерфейсу и назначению. Метка «готовый порт» показывает уже реализованные платформы.
TFT ST7789V: окна, заливка, линии и текст без framebuffer.
Порт: SPI write, DC, delay; опционально CS, RESET, backlight.
Шесть кнопок: антидребезг, удержание, автоповтор и очередь событий.
Порт: чтение уровня и время в миллисекундах.
Стек экранов, курсор, прокрутка и тема для динамического меню.
Порт: fill_rect и draw_text.
EEPROM 24Cxx с нарезкой записи по страницам.
Порт: I²C write, write-read и delay.
Передача 64-битных ROM датчиков парой CAN-кадров.
Порт: CAN TX/RX.
1-Wire, CRC8, SEARCH ROM и несколько термометров.
Порт: Init, DelayUs, Reset, WriteBit, ReadBit.
ProtoCAN над байтовым потоком: CRC16, ring, GAS и каталог GUI.
Порт: stream write и доступный объём TX.
Прошивка по ProtoCAN: A/B-слоты, resume, CRC32, verify и rollback.
Порт: CAN TX, Flash, metadata, verify, reboot.
SETGUI v1 firmware update: stream parser, CRC32 и resume.
Порт: UART TX/RX, DE и Flash.
SET v2: управление, телеметрия и прошивка через UART/CAN/USB/Ethernet.
Порт: доставка кадров, часы, карта и firmware backend.
RTC с резервным backup-томом и единым API времени.
Порт: RTC и backup storage.
Хостовая сторона без Qt и pyserial: принимает и возвращает bytes, подходит GUI, скриптам и CI.
29-битный CAN ID и тела сообщений. Зеркало pcan_id.c.
Кадр AA 55, stream parser, ресинхронизация и CRC16.
Кадр A5 5A, CRC32, каталог и подписка на значения.
from protocan import protocan, transport
parser = transport.FrameParser()
for frame in parser.feed(port.read(256)):
print(protocan.decode(frame.can_id, frame.data).summary)Python 3.9+, только stdlib. Полное README.
Маршрут для STM32, K1921, другого MCU или host-окружения.
Найдите в README раздел «Что нужно от платформы» или «Контракт порта».
Добавьте переносимые src/ и include/. CMSIS/HAL и IRQ оставьте в проекте.
DS18B20: F1/G4/F4; ProtoCAN transport: F4; RS-485 boot: F103/G474; RTC: K1921.
Создайте callbacks для I/O, времени или Flash. Контекст передавайте через void *.
Распиновку, clocks и адреса храните в board/app_config.h или config библиотеки.
Сначала host-тесты, затем smoke-test платы, границы памяти и аппаратные тайминги.
| Класс | Реализует проект | Остаётся в ядре |
|---|---|---|
| Дисплей | SPI, GPIO, delay | команды, геометрия, текст |
| Датчик | GPIO/open-drain, delay | поиск, CRC, данные |
| Поток | UART/USB/TCP RX/TX | кадры, CRC, parser |
| Загрузчик | Flash, metadata, verify | сессия, resume, state machine |
При смене MCU заменяются board/, port/, startup и linker script; приложение и ядра остаются.
my-device/
├── app/ логика изделия
├── board/app_config.h выводы, частоты, адреса
├── port/ адаптеры библиотек к SDK MCU
├── vendor/ CMSIS, startup, linker script
└── lib/templates/ git submodule
├── c/
└── python/lib/templates/c/ds18b20/src/onewire.c
lib/templates/c/ds18b20/src/ds18b20.c
lib/templates/c/ds18b20/ports/stm32g4/onewire_stm32g4.c
board/onewire_config.hInclude paths: c/ds18b20/include и board. В конфигурации меняются GPIO, pin и clock.