Создание Модели Электронного Компонента Для Proteus На Lua

У меня есть несколько долгосрочных проектов, один из которых — создание компьютера на базе CDP1802. Основную плату я смоделировал на бумаге и в Протеусе.

Довольно скоро возник вопрос: что делать с элементами, которых нет в Протеусе? На многих ресурсах подробно описано Как создать собственную модель на C++ в Visual Studio. К сожалению, этот вариант не очень удобен при сборке под Linux. А что, если вы не знаете C++ или вам нужно на лету редактировать модель для отладки? А я просто хочу сосредоточиться на моделировании, максимально упростив все остальное.

Так возникла идея создания имитационных моделей с помощью скриптов — на Lua. Кому интересно, смотрите вырезку (гифки 2МБ).



Создание модели электронного компонента для Proteus на Lua



Почему это необходимо?

Если забыть обо всей экзотике вроде написания модели процессора, то я уже давно отвык что-либо делать в симуляторе - подключал датчики к разным типам отладчиков, в руках осциллограф, мультиметр, JTAG/UART и отладка для себя.

Но когда нужно было проверить логику работы программы на случай сбоя/движения GPS и тому подобного, пришлось писать эмуляцию GPS на другом микроконтроллере.

Когда нужно было сделать телеметрию для машины по протоколу KWP2000, отладка «вживую» была неудобна и опасна.

А если ты один, ох как неудобно.

Возможность отлаживать/тестировать в дороге или там, где весь джентльменский набор таскать с собой просто неудобно (речь в первую очередь о хобби-проектах) — хорошее подспорье, так что место для симулятора есть.



Visual Studio C++ и GCC

Весь софт я пишу под GCC и модель тоже хотелось скомпилировать под него, используя разработанные библиотеки и код, который было бы сложно скомпилировать под MSVS. Проблема заключалась в том, что DLL, скомпилированная для mingw32, приводила к сбою Proteus. Были опробованы разные методы, в том числе манипулирование __thiscall и другие, но варианты с хаками на языке ассемблера оказались неудовлетворительными.

Друг лунный свет обладая большим опытом в подобных вопросах, он предложил и показал, как переписать интерфейс C++ на C с использованием виртуальных таблиц.

Из удобств, помимо возможности сборки под Linux «на месте», возможность, по идее, писать модели даже на Фортране — при желании.



Имитация C++

Идея «эмуляции» виртуальных классов на практике выглядит так: Исходный заголовок виртуального класса C++ выглядит так:
   

class IDSIMMODEL { public:

Теги: #C++ #Lua #Proteus #vsm #simulation #схемотехническое моделирование #C++ #Lua
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.