Каков хороший способ создания кода для взаимодействия с работающим приложением cpp, которое не требует перекомпиляции? - PullRequest
0 голосов
/ 21 января 2019

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

У меня уже есть код cpp, который используется повторно, взаимодействует с оборудованием и обладает широкими функциональными возможностями для отправки сообщений на устройства.

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

Для меня было бы наиболее разумно взаимодействовать с языком сценариев, который можно легко сгенерировать, чтобы иметь набор ссылок на базу cpp, которую можно загрузить по команде. (вроде системы плагинов)

Python - это действительно хороший вариант, но у меня почти нет опыта работы со встроенным Python, я изучил его и думаю, что я могу быть смущен тем, как интерпретируемый скрипт будет ссылаться на функциональность в оригинальная программа без чего-то вроде pybind11 и встроенного python, работающих вместе. Биндер, безусловно, имеет привлекательность. Не ускоряй, пожалуйста - может быть немного .

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

Просто сделайте все в cpp и загрузите библиотеки как обычный человек - надежный вариант, но, вероятно, самый сложный для генерации и выполнения проверок синтаксиса.

Сделайте все это на языке сценариев и избавьтесь от накладных расходов компилятора - Я имею в виду, технически это опция

Это, конечно, не все варианты, но это далеко не в моей области знаний, и я думаю, что было бы полезно обсудить.

Мне бы очень хотелось узнать, на что мне следует потратить свое время, занимаясь исследованиями. Я потратил слишком много времени, изучая Пибинда, и не могу спокойно спать по ночам.

В идеале этот рабочий процесс должен выглядеть примерно так:

На главном контроллере :

  1. Запущена интерфейсная программа (cpp)

  2. Интерфейсная программа выполняет диагностику и проверяет состояние модуля (уже выполнено)

  3. Проверка интерфейса для запуска скрипта для выполнения функциональности модуля

Сценарий :

  1. Сгенерировано из какого-то источника

  2. Запускает тесты, чтобы убедиться, что в генерации нет синтаксических ошибок

  3. Перемещается в папку, где программа интерфейса может ее захватить ("полностью" безопасным способом) Я шучу, я знаю проблемы с этой настройкой, но мы не рассматриваем это в данный момент момент

Это было очень долго, и мне жаль, что я просто очень потерян и вышел из моей зоны комфорта.

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

Еще один вариант, который я предложил вчера вечером:

Напишите очень простой пользовательский язык сценариев, который я могу проанализировать на стороне cpp и связать таким образом

1 Ответ

0 голосов
/ 24 января 2019

Если вы генерируете скрипт, вы, вероятно, можете упростить вещи до простого байтового кода, который будет интерпретироваться.Тогда вам не нужно возиться с синтаксическим анализом или проверкой синтаксиса.Каждая «инструкция» может быть простым кодом операции, за которым следует ноль или более операндов, где каждый операнд будет целым числом, числом с плавающей запятой или строкой (и любыми другими примитивными типами данных, которые поддерживаются / нужны вашему оборудованию).Вы можете использовать что-то вроде msgpack для компактного кодирования и декодирования инструкций.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...