3 KiB
3 KiB
port/ — porting layer
Glue-код между сторонними библиотеками (lib/, utils/) и платформой (bsp/).
Концепция
В проекте четыре слоя с чёткими границами:
graph TB
FW["firmware/*\nбизнес-логика"]
PORT["port/\nglue: адаптирует utils/ и lib/ к платформе"]
BSP["bsp/\nдрайверы периферии MIMXRT1052"]
UTILS["utils/\nплатформонезависимые алгоритмы"]
LIB["lib/ + sdk/\nсторонний код"]
FW --> PORT
FW --> BSP
FW --> UTILS
PORT --> BSP
PORT --> UTILS
PORT --> LIB
Код попадает в port/ если выполняются оба условия:
- Связывает платформонезависимую библиотеку / утилиту с конкретным BSP.
- Сам по себе не является ни библиотекой, ни драйвером.
Не попадает в port/:
- Не зависит от
bsp/→ идёт вutils/ - Самостоятельный драйвер периферии → идёт в
bsp/ - Сторонняя библиотека без изменений → идёт в
lib/
Структура
port/
├── CMakeLists.txt
├── README.md ← этот файл
├── log/ ← UART-адаптер для utils/log
│ ├── CMakeLists.txt # таргет port_log_uart
│ ├── README.md
│ ├── include/port/
│ │ └── log_uart.h
│ └── src/
│ └── log_uart.c
└── fatfs/ ← diskio поверх bsp_sd (FatFS)
├── CMakeLists.txt # таргет port_fatfs_sd (INTERFACE)
└── sd/
├── CMakeLists.txt
├── include/port/fatfs/
│ └── diskio_sd.h
└── src/
└── diskio_sd.c
Планируется: port/freertos/ — heap_4.c, configASSERT,
vApplicationHooks.
Таблица адаптеров
| Таргет CMake | Что адаптирует | Куда | Тип |
|---|---|---|---|
port_log_uart |
utils/log |
bsp_uart_host |
STATIC |
port_fatfs_sd |
FatFS diskio | bsp_sd |
INTERFACE |
Соглашения
Именование таргетов: port_<что>_<транспорт> — например port_log_uart,
port_fatfs_sd. Позволяет иметь несколько адаптеров для одной библиотеки.
Include-путь: публичные заголовки в port/<модуль>/include/port/,
подключение через #include "port/<модуль>.h".
Host-сборка: port/CMakeLists.txt содержит ранний return() при
BUILD_TESTS_HOST=ON — bsp/ недоступен на хосте.