Развертывание - это процесс использования сгенерированного кода в приложении, которое запускается вне MATLAB® окружение. Многие темы и факторы имеют отношение к процессу развертывания.
Чтобы создать приложение, создайте или используйте основную функцию C/C + +, чтобы вызвать функции точки входа C/C + +, сгенерированные из ваших функций MATLAB. Основная функция задает входные, выходные и другие функциональные возможности, которые не задают ваши алгоритмы MATLAB. Генератор кода производит пример основной функции по умолчанию. Используйте сгенерированный пример main в качестве начальной точки для создания новой основной функции. Пример main предоставляет четкий пример того, как передать вход и выход из сгенерированного кода. Для получения дополнительной информации и примеров смотрите:
Ваш код C/C + + должен вызвать функцию initialize и функцию terminate, которые генерируются в дополнение к функциям точки входа C/C + +. По умолчанию сгенерированная функция точки входа C/C + + вызывает функцию initialize. Сгенерированная основная функция вызывает функцию terminate. Когда вы создаете и редактируете свою собственную главную функцию, убедитесь, что вызываются функции инициализации и завершения. Для получения дополнительной информации смотрите:
Чтобы написать основную функцию, вы должны ознакомиться с сгенерированными интерфейсами функции.
Сгенерированные прототипы функции 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 Supported Hardware. Для Embedded Coder доступно много дополнительных пакетов аппаратной поддержки. Посмотрите Поддерживаемые аппаратные средства Embedded Coder (Embedded Coder). Если вы хотите задать пользовательский набор инструментальных средств для сборки, который не доступен из пакета аппаратной поддержки, можно зарегистрировать свой собственный набор инструментальных средств. См. Раздел «Регистрация пользовательского набора инструментальных средств»
В приложении MATLAB Coder выберите пакет аппаратной поддержки на этапе Generate Code из выпадающего списка Hardware Board. В командной строке укажите пакет аппаратной поддержки при помощи coder.hardware
функция.
В некоторых случаях можно выбрать генерацию исходного кода, а затем создать исходный код для проекта вручную. Вручную создайте исходный код, когда:
Ваш сгенерированный исходный код легко создать. Для примера ваш сгенерированный код не требует привязки к дополнительным библиотекам.
Вы хотите создать исполняемый файл для пользовательского оборудования, для которого у вас нет пакета аппаратной поддержки.
Вы знаете, как создать исходный код C/C + + или система сборки для целевой платформы уже сконфигурирована.
Генератор кода производит buildInfo
объект, который позволяет вам просматривать и изменять информацию о сборке, которую MATLAB Coder использует для создания двоичных выходов. Вы можете использовать эту информацию для понимания того, как вручную создать свой сгенерированный код. См. раздел Индивидуальную настройку процесса сборки и RTW.BuildInfo
(Embedded Coder).
Генератор кода создает файл 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 является генерация и выполнение функций C/C + + MEX. 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