Обзор и структура таргета
|
Страница в процессе разработки. |
Таргет Engee — это пакет поддержки, который связывает модель Engee с конкретной целевой платформой. Платформой может быть микроконтроллер, отладочная плата, промышленное устройство, удаленный Linux-компьютер или локальное приложение.
Таргет выполняет все необходимые шаги — от модели Engee до запуска на целевой платформе:
-
Получает описание модели и настройки запуска.
-
Использует Си-код, сгенерированный из модели Engee.
-
Формирует проект для целевой платформы.
-
Собирает проект подходящим тулчейном[1].
-
Загружает или запускает собранный артефакт.
-
При необходимости организует обмен данными с моделью во время выполнения.
Пользовательский таргет добавляется в Engee.Интеграции и синхронизируется с Engee и после этого может использоваться в скриптах и блоках.
Структура таргета
Минимальный шаблон таргета размещается в директории targets. Для одной платформы удобно создать отдельную папку:
my_extension/
└── targets/
└── MyTarget/
├── __init__.py
└── MyTarget.py
Пользовательский пакет поддержки встраиваемой системы (таргет) должен располагаться в targets/<папка_таргета>/.
|
Как правило, для таргета также нужны шаблоны, драйверы, файлы сборки, библиотека блоков и демонстрационные модели, например:
my_extension/
└── targets/
└── MyTarget/
├── __init__.py
├── MyTarget.py
├── README.md
├── blocks_library/
│ └── engee_my_target.nglib
├── demos/
│ └── example_my_target.engee
├── drivers/
│ ├── platform_driver.c
│ └── platform_driver.h
├── templates/
│ ├── main.c
│ └── CMakeLists.txt
├── FirmwareBuilder.py
└── FirmwareLoader.py
Приведенная выше схема является обобщенной. Для Arduino-совместимых платформ вместо main.c может генерироваться файл с расширением .ino. Для bare-metal, RTOS или Linux-платформ удобнее генерировать main.c и файл сборки.
Назначение типовых частей:
-
MyTarget.py— основной класс таргета и модель параметров блока EDM-Target; -
__init__.py— импорт основного класса, чтобы механизм загрузки пакета поддержки мог найти его; -
templates— Jinja-шаблоны точки входа, планировщика/рантайм-кода и файлов сборки; -
drivers— платформенные драйверы C/C++ и Си-API, вызываемые из блоков C Function; -
FirmwareBuilder.py— обертка над компилятором и системой сборки; -
FirmwareLoader.py— загрузка прошивки; -
blocks_library— библиотека блоков Engee для пользователя; -
demos— модели, позволяющие быстро начать работу с устройством.
Режимы работы
Поддерживаются два режима выполнения модели: независимый и интерактивный.
Независимый режим
Независимый режим означает, что после сборки и загрузки модель выполняется на целевой платформе самостоятельно. Engee запускает цепочку генерации, сборки и загрузки, но во время выполнения модели не поддерживает постоянный канал связи с рантаймом.
Типичный сценарий независимого режима выполнения содержит следующие шаги:
-
Engee генерирует Си-код модели.
-
Таргет создает проект целевой платформы.
-
Тулчейн собирает прошивку, бинарный или исполняемый файл.
-
Таргет загружает артефакт на устройство или запускает приложение.
-
Модель выполняется автономно до завершения, перезагрузки, выключения питания или другого платформенного события.
С точки зрения разработки нового таргета такой режим предпочтителен на начальном этапе: он требует меньше рантайм-инфраструктуры и позволяет сначала проверить корректность генерации, сборки, таймера и вызова step-функций.
Интерактивный режим
Интерактивный режим означает, что модель выполняется на целевой платформе, а Engee во время выполнения подключается к ней, получает значения выбранных сигналов и может менять настраиваемые параметры без повторной сборки и загрузки.
Для такого режима одного запуска Си-кода недостаточно. Нужен канал связи между Engee и моделью. В приведенных примерах этот канал строится на XCP (Universal Measurement and Calibration) протоколе[2].
Типичный сценарий интерактивного выполнения содержит следующие шаги:
-
Engee генерирует Си-код модели.
-
Таргет создает проект с рантаймом интерактивного режима выполнения.
-
В проект добавляется XCP slave и платформенный транспорт, например UART или TCP.
-
Тулчейн собирает артефакт и ELF-файл с символами модели.
-
Таргет загружает или запускает модель.
-
Engee подключается к рантайму, запускает поток данных и отправляет команды изменения параметров.
Таргет с поддержкой интерактивного режима сложнее в реализации, чем таргет только с независимым режимом, так как в дополнение к сборке и запуску он должен обеспечить корректный транспорт, адресацию памяти, наличие символов в ELF-файле и регулярное обслуживание обмена данными в планировщике модели.
Что выбрать сначала
Если платформа новая, то стоит начать с независимого режима:
-
проще проверить базовый путь от модели до исполняемого артефакта;
-
меньше требований к рантайму и тулчейну;
-
ошибки сборки, загрузки и планирования модели легче отделить от ошибок обмена данными.
Интерактивный режим стоит добавлять после того, как сценарий независимого режима стабильно работает на простой модели.