Требуется мнение об идее реализации синтетических портов, пока
привожу основные тезисы: Синтетической порт(Synth port)
представляет собой программу, платформонезависимая логика которой
запускается не на физическом устройстве, а в синтетическом
(программном) окружении. Синтетическая периферия является
высокоуровневой программной реализацией аппаратной части
микроконтроллера (МК) и предназначена для отладки
платформонезависимой логики. Синтетическая периферия не ставит перед собой цель точной эмуляции поведения железа и представляет собой некую обобщенную программную реализацию того или иного периферийного блока. Модули, реализующие синтетическую периферию, пишутся по общим с драйверами правилам. Соблюдение этих правил позволит собирать один и тот же код под разные платформы без накладных расходов, упращая поддержу разных ревизий плат и ускоряя разработку новых устройств.
Примечание: правила написания индивидуальны для каждого вида блока ввиду их различного назначения и аппаратной реализации. Разумеется, есть и общие для модулей правила.
Виртуальное окружение (Environment) представляет собой набор тестов, симулирующих работу устройств, которыми должен управлять целевой (Target) микроконтроллер. Примером таких устройств может быть spi-память, IO на разъёмах, микросхемы-драйверы (например RS-422). Некоторые из этих интерфейсов могут связывать два окружения между собой, тот же драйвер RS-485. Окружение может служить также для прокидывания событий и данных в другое ПО, например, создавая виртуальный TTY, связанный с UART синтетического устройства.
Виртуальное окружение создается сервером согласно описанию, представленному в формате JSON. Основным элементам окружения является Router, Bus, Device и Interconnect.
В задачи Router входит приём команд от сервера и передача их к Device через нужную шину либо передача серверу сообщения от Device.
Задача Bus - доставить сообщение нужному устройству.
Задача Device - симуляция логики работы физического устройства, например SPI-Flash, либо генерация событий (stimulus). Одно и тоже устройство может быть присоединено к нескольким шинам (Например, GPIO + SPI).
Задачей Interconnect является передача команд и данных между окружениями. Это позволяет производить симуляцию сетей, например Modbus.
Элементы виртуального окружения могут делать выводы о логических ошибках при работе с ними, например: обращение к устройству I2C по несуществующему адресу, обращение к устройству SPI без сигнала CS, запись в несуществующий регистр и т.д. Информация об обнаруженных проблемах будет выведена в лог.
Примечание: построение синтетического кода планируется на базе Actor Model фреймворков. Для с++ - SObjectizer (лицензия BSD), на питоне - Thespian (пока не изучал)