У меня есть несколько долгосрочных проектов, один из которых — создание компьютера на базе CDP1802. Основную плату я смоделировал на бумаге и в Протеусе.
Довольно скоро возник вопрос: что делать с элементами, которых нет в Протеусе? На многих ресурсах подробно описано Как создать собственную модель на C++ в Visual Studio. К сожалению, этот вариант не очень удобен при сборке под Linux. А что, если вы не знаете C++ или вам нужно на лету редактировать модель для отладки? А я просто хочу сосредоточиться на моделировании, максимально упростив все остальное.
Так возникла идея создания имитационных моделей с помощью скриптов — на Lua. Кому интересно, смотрите вырезку (гифки 2МБ).
Почему это необходимо?
Если забыть обо всей экзотике вроде написания модели процессора, то я уже давно отвык что-либо делать в симуляторе - подключал датчики к разным типам отладчиков, в руках осциллограф, мультиметр, JTAG/UART и отладка для себя.Но когда нужно было проверить логику работы программы на случай сбоя/движения GPS и тому подобного, пришлось писать эмуляцию GPS на другом микроконтроллере.
Когда нужно было сделать телеметрию для машины по протоколу KWP2000, отладка «вживую» была неудобна и опасна.
А если ты один, ох как неудобно.
Возможность отлаживать/тестировать в дороге или там, где весь джентльменский набор таскать с собой просто неудобно (речь в первую очередь о хобби-проектах) — хорошее подспорье, так что место для симулятора есть.
Visual Studio C++ и GCC
Весь софт я пишу под GCC и модель тоже хотелось скомпилировать под него, используя разработанные библиотеки и код, который было бы сложно скомпилировать под MSVS. Проблема заключалась в том, что DLL, скомпилированная для mingw32, приводила к сбою Proteus. Были опробованы разные методы, в том числе манипулирование __thiscall и другие, но варианты с хаками на языке ассемблера оказались неудовлетворительными.Друг лунный свет обладая большим опытом в подобных вопросах, он предложил и показал, как переписать интерфейс C++ на C с использованием виртуальных таблиц.
Из удобств, помимо возможности сборки под Linux «на месте», возможность, по идее, писать модели даже на Фортране — при желании.
Имитация C++
Идея «эмуляции» виртуальных классов на практике выглядит так: Исходный заголовок виртуального класса C++ выглядит так:Теги: #C++ #Lua #Proteus #vsm #simulation #схемотехническое моделирование #C++ #Luaclass IDSIMMODEL { public:
-
Семен Семенов Знает, Каким Будет Googlephone
19 Oct, 24 -
Хаброноч
19 Oct, 24 -
Вышла Миранда Im V0.7.4
19 Oct, 24 -
Быть Злым
19 Oct, 24