firmware_<имя>.c/.h (планировщик такта),
hal_<имя>.h (контракт датчиков), main_pi_*.c / sketch_*.ino (оболочки),
cores/*.c (верифицированные ядра), README.md.Перед прошивкой прогоните схему в «МК-эмуляторе» (кнопка рядом) — сервер соберёт эту же Си-прошивку и покажет осциллограммы выходов. Что видите в эмуляторе — то и получите на плате.
Любой Raspberry Pi (Zero 2 W и выше), Raspberry Pi OS, gcc (уже в системе).
unzip device_firmware.zip && cd firmware # реализуйте датчики/актуаторы из hal_<имя>.h (пример каркаса — в README) gcc -O2 -std=c99 -I. -Icores cores/*.c firmware_<имя>.c main_pi_<имя>.c hal_my.c -o device
Прошивка не привязана к пинам — вы отдаёте ей входы и забираете выходы. Минимальный hal_my.c:
#include "hal_<имя>.h"
#include <unistd.h>
int32_t hal_in_isen_adc_a(void){ return read_my_adc(0); } /* ваш датчик */
void hal_out_fdir_action(int32_t v){ set_my_led(v); } /* ваш актуатор */
void hal_tick_wait(void){ usleep(10000); } /* период такта, здесь 100 Гц */
GPIO/I²C/SPI — любой привычный способ: libgpiod, pigpio, /dev/i2c-*.
sudo cp device /usr/local/bin/ printf '[Unit]\nDescription=IPCosmos edge device\n[Service]\nExecStart=/usr/local/bin/device\nRestart=always\n[Install]\nWantedBy=multi-user.target\n' | sudo tee /etc/systemd/system/ipc-device.service sudo systemctl enable --now ipc-device
sketch_<имя>.ino, firmware_<имя>.c/.h,
hal_<имя>.h и все cores/*.c/.h.hal_my.cpp с реализацией hal_in_*/hal_out_*/hal_tick_wait:extern "C" {
#include "hal_<имя>.h"
}
int32_t hal_in_isen_adc_a(void){ return analogRead(A0); }
void hal_out_fdir_action(int32_t v){ digitalWrite(13, v>2); }
void hal_tick_wait(void){ delay(10); } // 100 Гц
pio project init --board <ваша_плата> # src/ ← sketch + firmware + cores + hal_my.cpp pio run -t upload
Вся логика — целочисленная (int32/int64, без float): работает одинаково на AVR, Cortex-M0…M7, ESP32. Рекомендуемый класс — Cortex-M (Arduino Due/Zero/Nano 33, STM32 Nucleo): 32-битный int нативный.
| Класс устройства | Типовой такт | hal_tick_wait |
|---|---|---|
| Стражи/FDIR/BMS (event) | 10–100 Гц | delay(10…100 мс) |
| Контуры управления (control) | 100 Гц–1 кГц | таймер 1–10 мс |
| Тяжёлая математика на Pi (frame) | по кадру данных | по готовности кадра |
Пер-сэмпловые МГц-потоки (РЧ, видео на скорости АЦП) на микрокомпьютере не работают — такие ядра помечены бейджем ПЛИС и собираются только в битстрим.
В пакете лежит plan_<имя>.json — порядок входов/выходов. Соберите прошивку с
-DDEV_STANDALONE и прогоните файл стимулов — вывод должен совпасть с «МК-эмулятором» портала
тик-в-тик:
gcc -O2 -std=c99 -DDEV_STANDALONE -I. -Icores cores/*.c firmware_<имя>.c -o fw_test ./fw_test stim.txt
© 2026 ООО «Технологии репликации» (techrepl.ru) · IPCosmos / TRAI FPGA OS