Развертывание является процессом использования сгенерированного кода в приложении, которое запускается за пределами среды MATLAB®. Много тем и факторов относятся к процессу развертывания.
Чтобы создать приложение, создайте или используйте C/C++ основная функция, чтобы вызвать функции точки входа C/C++, сгенерированные от ваших функций MATLAB. Основная функция задает вход, выход и другую функциональность, которую не задают ваши алгоритмы MATLAB. Генератор кода производит пример основная функция по умолчанию. Используйте сгенерированный пример, основной в качестве начальной точки для создания новой основной функции. Основной пример обеспечивает ясный пример для того, как передать вход и вывести от сгенерированного кода. Для получения дополнительной информации и примеры, см.:
Ваш код C/C++ должен вызвать инициализировать функцию и оконечную функцию, которые сгенерированы в дополнение к вашим функциям точки входа C/C++. По умолчанию, сгенерированные вызовы функции точки входа C/C++ инициализировать функция. Сгенерированный пример основные вызовы функции оконечная функция. Как вы создаете и редактируете свою собственную основную функцию, гарантируете, что и инициализировать и завершают работу, функции вызваны. Для получения дополнительной информации см.:
Чтобы записать основную функцию, необходимо быть знакомы со сгенерированными функциональными интерфейсами.
Сгенерированные прототипы функции C/C++ используют типы данных, которые соответствуют типам, которые вы используете в своем коде MATLAB. Смотрите Отображение Типы MATLAB к Типам в Сгенерированном коде. С Embedded Coder® можно настроить внешний вид и стиль сгенерированных типов данных. Смотрите Внешний вид Кода (Embedded Coder).
Функции точки входа C/C++, сгенерированные от MATLAB Coder™, следуют этим соглашениям:
Передайте входные массивы ссылкой.
Возвратите выходные массивы ссылкой.
Передайте входные скаляры значением.
Возвратите скаляры значением для единственных выходных функций.
Возвратите скаляры ссылкой:
Для функций с несколькими выходными параметрами.
Когда вы используете ту же переменную в качестве ввода и вывода.
Если вы используете ту же переменную в качестве ввода и вывода в вашем коде MATLAB, сгенерированный код передает скаляр ссылкой. Смотрите Избегают Копий Данных Входных параметров функции в Сгенерированном коде.
Фиксированный размер и массивы переменного размера представлены различными типами данных в сгенерированном коде C/C++. Для получения дополнительной информации смотрите Использование C Массивы в Сгенерированных Функциональных Интерфейсах.
После того, как вы генерируете код и записываете основной файл, который использует сгенерированный код, затем необходимо встроить код в исполняемый файл или при помощи MATLAB Coder или при помощи других инструментов сборки. Вы можете хотеть запустить исполняемое приложение на своей платформе MATLAB, серверной платформе, или на другой платформе, целевой платформе. Чтобы группировать необходимые элементы сгенерированного кода в экспортный zip-файл, который можно вручную передать целевой платформе, используйте packNGo
функция.
Папка генерации кода не обязательно содержит все файлы, используемые сгенерированным кодом. Папка может также содержать вспомогательные файлы, которые не используются сгенерированным кодом. Используйте packNGo
группировать и перемещать файлы сгенерированного кода вместо того, чтобы переместить и включать целое содержание папки генерации кода.
Можно сгенерировать двоичные файлы непосредственно при помощи codegen
команда или приложение MATLAB Coder путем выбора типа сборки статической библиотеки, динамической библиотеки или исполняемого файла (lib, dll, или exe). По умолчанию сгенерированные двоичные файлы функциональны для серверной платформы аппаратная и операционная система. Чтобы создать исполняемый файл, необходимо задать или обеспечить основной файл. Для примера смотрите Генерирующие Автономные Исполняемые файлы C/C++ из кода MATLAB. Если вы устанавливаете GenerateExampleMain
свойство настройки возражает против 'GenerateCodeAndCompile'
, генератор кода создает исполняемый файл при помощи сгенерированного примера основной файл.
Если вы хотите развернуть свой код в другую платформу, то можно использовать пакеты аппаратной поддержки, которые оказывают поддержку для генерации и создания двоичного кода для той платформы. Эта поддержка включает определенные наборы инструментальных средств и параметры конфигурации генерации кода, которых требует целевой компьютер. Поскольку список пакетов поддержки предусмотрел MATLAB Coder, смотрите MATLAB Coder Поддерживаемые аппаратные средства. Много дополнительных пакетов аппаратной поддержки доступны для Embedded Coder. Смотрите Embedded Coder Поддерживаемые аппаратные средства (Embedded Coder). Если вы хотите задать пользовательский набор инструментальных средств для сборки, которая не доступна от пакета аппаратной поддержки, можно указать собственный набор инструментальных средств. Смотрите Пользовательскую Регистрацию Набора инструментальных средств.
В приложении MATLAB Coder выберите пакет аппаратной поддержки во время шага Generate Code от Hardware Board выпадающий список. Из командной строки задайте пакет аппаратной поддержки при помощи coder.hardware
функция.
В определенных случаях вы можете принять решение сгенерировать исходный код, и затем вручную создать исходный код для вашего проекта. Вручную создайте исходный код когда:
Ваш сгенерированный исходный код легко создать. Например, ваш сгенерированный код не требует соединения против дополнительных библиотек.
Вы хотите создать исполняемый файл для специального оборудования, для которого у вас нет пакета аппаратной поддержки.
Вы хорошо осведомлены в создании исходного кода C/C++, или система сборки для целевой платформы уже сконфигурирована.
Генератор кода производит buildInfo
объект, который позволяет вам просмотреть и изменить информацию о сборке что использование MATLAB Coder, чтобы создать двоичные выходы. Можно использовать эту информацию в понимании, как вручную создать сгенерированный код. Смотрите Индивидуальную настройку Процесса сборки и RTW.BuildInfo
.
Генератор кода производит make-файл, который показывает информацию о сборке, такую как флаги ссылки и компиляция. Найдите этот make-файл в папке генерации кода. Сгенерированный make-файл характерен для целевой платформы, которую вы задаете путем выбора пакета аппаратной поддержки или серверной платформы, если никакой пакет аппаратной поддержки не задан. Если вы вручную создаете свой исходный код, можно использовать этот make-файл, чтобы идентифицировать и диагностировать требования сборки, такие как компиляция и соединение флагов.
Чтобы видеть, как вручную сконфигурировать генерацию кода и сборку для целевой платформы, смотрите, Развертывают Сгенерированный код C во Внешнее оборудование: Примеры Raspberry Pi.
Когда это необходимо, чтобы использовать функциональность сгенерированного кода в существующем проекте C/C++, можно сгенерировать статическую библиотеку или динамическую библиотеку. Библиотеки могут обеспечить более модульный интерфейс, чем сгенерированный исходный код. Когда MATLAB Coder генерирует статическую библиотеку или динамическую библиотеку:
Библиотека подходит для платформы, что вы продолжаете работать, если вы не задаете альтернативную платформу через пакет аппаратной поддержки.
Сгенерированные заголовочные файлы для кода С явным образом объявляют экспортируемые функции как extern "C"
упростить интегрирование библиотеки в приложения C++.
Сгенерированные расширения файла библиотеки соответствуют операционной системе серверной платформы MATLAB.
Операционная система | Статическая библиотека | Динамическая библиотека |
---|---|---|
Windows® | .lib | .dll и .lib для соответствующей библиотеки импорта |
macOS | .a | .dylib |
Linux® | .a | .so |
Необходимо скомпилировать и соединиться против библиотек, когда вы создаете исполняемый файл. Когда исполняемый файл, который пользуется динамической библиотекой запуски, библиотека, должен быть на системном пути или в исполняемой папке. Для примеров пользования сгенерированной библиотекой см.:
Загрузка сгенерировала динамические библиотеки в MATLAB при помощи loadlibrary
функция не рекомендуется и может привести к неправильным поведениям или катастрофическим отказам.
По умолчанию MATLAB Coder производит один файл кода С для каждого файла кода MATLAB. Можно принять решение разделить сгенерированный код в один один файл и сгенерировать код с индивидуально настраиваемыми выходными папками и бинарными именами. Смотрите Как Сгенерированный код Разделов MATLAB Coder.
С Embedded Coder можно настроить сгенерированные имена файлов. Смотрите Настраивают Имена файлов C/C++, Сгенерированные из кода MATLAB (Embedded Coder).
Прежде чем вы развернете сгенерированный код для выполнения вне среды MATLAB, можно проверить его в среде MATLAB. Первичный рабочий процесс для верификации с MATLAB Coder является генерацией и выполнением функций MEX C/C++. MEX-функции, запущенные в среде MATLAB и, обеспечивают проверку ошибки времени выполнения и диагностику. Смотрите Верификацию кода.
Embedded Coder предлагает глубоко дополнительную функциональность для верификации кода и тестирования. Можно использовать программное обеспечение в цикле (SIL) и процессоре в цикле (PIL) выполнение, чтобы протестировать поведение сгенерированного кода на программном и аппаратном обеспечении за пределами среды MATLAB. Смотрите Верификацию (Embedded Coder).
Если ваша цель поддерживает только single
типы данных и не double
типы данных, можно сгенерировать код с одинарной точностью при помощи codegen
-singleC
опция. Эта опция требует Fixed-Point Designer™. Если ваша цель поддерживает только целочисленные типы данных, используйте -float2fixed
опция. Смотрите codegen
.
MATLAB Coder генерирует читаемый и портативный код C/C++ для подмножества языка MATLAB. Если вы хотите сгенерировать приложение независимого исполняемого файла для серверной платформы, которая пользуется библиотеками MATLAB Runtime, но запускается без лицензии MATLAB, то используйте MATLAB Compiler SDK™. Для сравнения продуктов см. https://www.mathworks.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-integrate-my-matlab-applications-with-c-c