Чтобы создать исполняемые программы, которые интегрируют сгенерированный код и внешний код C or C++, выполните итерации через задачи в этой таблице.
Задача | Действие | Больше информации |
---|---|---|
1 | Выберите, использовать ли подход набора инструментальных средств или обработать процесс сборки подхода make-файла по шаблону. | Выберите подход к сборке и настройки процесс сборки Для примера смотрите Рабочий процесс Процесса сборки для Систем реального времени. |
2 | Сконфигурируйте поддержку процесса сборки своего внешнего кода. | Сконфигурируйте параметры для интегрированного процесса сборки кода |
3 | Сконфигурируйте поддержку сборки S-функции своего внешнего кода. | Используйте makecfg, чтобы Настроить Сгенерированные Make-файлы для S-функций Для примеров смотрите Вызов Внешний код С из Типового кодекса и Сгенерированного кода и Вызова Допускающий повторное использование Внешний Код алгоритма для Симуляции и Генерации кода. |
4 | Сконфигурируйте процесс сборки, чтобы найти внешний источник кода, библиотеку и заголовочные файлы. | Управляйте зависимостями от файла процесса сборки Управляйте местоположением библиотеки и называющий во время сборки |
5 | Настройте сделанную на заказ обработку, требуемую для вашей внешней интеграции кода. | Для рабочего процесса индивидуальной настройки процесса сборки смотрите, Настраивают Обработку Сборки Постгенерации кода. Чтобы автоматизировать применение индивидуальных настроек сборки к сборке подхода набора инструментальных средств, смотрите, Настраивают Процесс сборки с sl_customization.m. Чтобы автоматизировать применение индивидуальных настроек сборки к сборке подхода make-файла шаблона, смотрите, Настраивают Процесс сборки с Файлом STF_make_rtw_hook. |
Таблица предоставляет руководство по параметрам конфигурации модели на Code Generation> панель Custom Code диалогового окна Model Configuration Parameters, которые поддерживают процесс сборки для внешней интеграции кода. Для получения информации о папках для вашего внешнего кода смотрите, Управляют Папками Процесса сборки. Если вы принимаете решение поместить свой внешний код в папку Генерации кода, смотрите Заповедник Внешние Файлы кода в Папке Сборки.
К | Выбрать |
---|---|
Добавьте включают папки, которые содержат заголовочные файлы к процессу сборки | Additional build information> Include directories, и вводит абсолютные или относительные пути в папки. Если вы задаете относительные пути, пути должны быть относительно папки, содержащей ваши файлы модели, не относительно папки сборки. Порядок, в котором вы задаете папки, является порядком, в котором они ищутся заголовок, источник и файлы библиотеки. |
Добавьте исходные файлы, которые будут скомпилированы и соединены | Additional build information> Source files, и вводит полные пути или только имена файлов для файлов. Введите только имя файла, если файл находится в текущей папке MATLAB® или в одной из включать папок. Для каждого дополнительного источника, который вы задаете, процесс сборки расширяет типовое правило в make-файле шаблона для папки, в которой расположен исходный файл. Например, если исходный файл расположен в папке
%.obj: buildir\inc\%.c $(CC) -c -Fo$(@F) $(CFLAGS) $< Процесс сборки добавляет правила в порядке, что вы перечисляете исходные файлы. |
Добавьте библиотеки, которые будут соединены | Additional build information> Libraries, и вводит полные пути или только имена файлов для библиотек. Введите только имя файла, если библиотека расположена в текущей папке MATLAB или в одной из включать папок. |
Используйте те же настройки пользовательского кода в качестве заданных для симуляции блоков MATLAB Function, графиков Stateflow® и блоков Таблицы истинности | Use the same custom code settings as Simulation Target Этот параметр относится к панели Simulation Target в диалоговом окне Configuration Parameters. |
Позвольте модели библиотеки использовать настройки пользовательского кода, уникальные от родительской модели, до которой соединяется библиотека | Use local custom code settings (do not inherit from main model) Этот параметр доступен только для моделей библиотеки, которые содержат блоки MATLAB Function, диаграммы Stateflow или блоки Таблицы истинности. |
По умолчанию процесс сборки удаляет внешние исходные файлы. Можно сохранить внешние исходные файлы следующим эти инструкции.
Если вы помещаете .c/.cpp
или .h
исходный файл в папке сборки, и вы хотите препятствовать тому, чтобы генератор кода удалил его во время процесса генерации кода TLC, вставил текст target specific file
в первой линии .c/.cpp
или .h
файл. Например:
/* COMPANY-NAME target specific file * * This file is created for use with the * COMPANY-NAME target. * It is used for ... */ ...
Убедитесь, что вы записываете текст, “предназначаются для определенного файла” как показано в предыдущем примере, и что текст находится в первой линии исходного файла. Другой текст может появиться прежде или после этого текста.
Отмечающие пользовательские файлы этим способом предотвращают постобработку этих файлов, чтобы расположить их с отступом со сгенерированными исходными файлами. Автоматический отступ произошел в предыдущих релизах, чтобы создать файлы папки с именами, имеющими шаблон model
_*.c/.cpp
(где *
был текст). Расположение с отступом безопасно, но может вызвать различия, обнаруженные программным обеспечением системы контроля версий, которое может потенциально инициировать ненужные обновления.
Написанные пользователем Блоки s-function обеспечивают мощный способ включить внешний код в среду разработки Simulink®. В большинстве случаев вы используете S-функции, чтобы интегрировать существующий внешний код со сгенерированным кодом. Несколько подходов к записи S-функций доступны:
S-функции также обеспечивают самый гибкий и способный способ включать информацию о сборке для наследия и файлов пользовательского кода в процессе сборки.
Существуют различные способы добавить S-функции в процесс сборки.
При создавании моделей с S-функциями процесс сборки добавляет правила, включайте пути и имена исходного файла к сгенерированному make-файлу. Исходные файлы (.h
C
, и .cpp
) поскольку S-функция должна быть в той же папке как файл MEX S-функции. Использовать ли ли подход набора инструментальных средств или подход make-файла шаблона для сборок, процесс сборки распространяет эту информацию через make-файл шаблона или набор инструментальных средств.
Если файл
существует в той же папке как файл MEX S-функции (например, sfcnname
H
), папка добавляется к включать пути.sfcnname
mexext
Если файл
или sfcnname
C
существует в той же папке как файл MEX S-функции, процесс сборки добавляет правило make-файла для компиляции файлов от той папки. sfcnname
.cpp
Когда S-функция не встраивается с файлом TLC, процесс сборки должен скомпилировать исходный файл S-функции. Чтобы определить имя исходного файла, чтобы добавить к списку файлов, чтобы скомпилировать, процесс сборки ищет
на пути MATLAB. Если исходный файл найден, процесс сборки добавляет имя исходного файла к make-файлу. Если sfcnname
.cpp
не найден на пути, процесс сборки добавляет имя файла sfcnname
.cpp
к make-файлу, является ли это на пути MATLAB. sfcnname
C
Примечание
Для механизма Simulink, чтобы найти файл MEX для симуляции и генерации кода, это должно существовать на пути MATLAB или существовать в нашем текущем MATLAB рабочая папка.
Если ваша S-функция имеет дополнительные зависимости от исходного файла, необходимо добавить имена дополнительных модулей к процессу сборки. Задайте имена файлов:
В поле S-function modules в диалоговом окне параметра Блока s-function
С SFunctionModules
параметр в вызове set_param
функция
Например, предположите, что вы создаете свою S-функцию с несколькими модулями.
mex sfun_main.c sfun_module1.c sfun_module2.c
Можно затем добавить модули в процесс сборки путем выполнения одного из следующих действий:
В диалоговом окне Блока s-function задайте sfun_main
, sfun_module1
, и sfun_module2
в поле S-function modules.
В командной строке MATLAB введите:
set_param(sfun_block,'SFunctionModules','sfun_module1 sfun_module2')
В качестве альтернативы можно задать переменную, чтобы представлять значение параметров.
modules = 'sfun_module1 sfun_module2' set_param(sfun_block,'SFunctionModules', modules)
Поле S-function modules и SFunctionModules
параметр не поддерживает полные спецификации пути к исходному файлу. Чтобы использовать параметр, генератор кода должен найти дополнительные исходные файлы при выполнении make-файла. Для генератора кода, чтобы определить местоположение дополнительных файлов, разместите их в ту же папку как файл MEX S-функции. Можно затем усилить неявную поддержку сборки, описанную в Неявной Поддержке Сборки.
Когда вы будете готовы сгенерировать код, обеспечьте генератор кода, чтобы восстановить топ-модель, как описано в Регенерации Управления Кода Топ-модели.
Для более сложных зависимостей S-файла-функции, таких как определение исходных файлов в других местоположениях или определении библиотек или объектных файлов, используют rtwmakecfg.m
API, как описано в Использовании rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.
Если вы встраиваете свою S-функцию путем записывания файла TLC, можно добавить имена исходного файла к процессу сборки при помощи библиотечной функции TLC LibAddToModelSources
. Для получения дополнительной информации смотрите LibAddSourceFileCustomSection (файл, builtInSection, newSection).
Примечание
Эта функция не поддерживает полные спецификации пути к исходному файлу. Функция принимает, что генератор кода может найти дополнительные исходные файлы при выполнении make-файла.
Другая полезная библиотечная функция TLC LibAddToCommonIncludes
. Используйте эту функцию в #include
оператор, чтобы включать заголовочные файлы S-функции в сгенерированный model
.h
заголовочный файл. Для получения дополнительной информации смотрите LibAddToCommonIncludes (incFileName).
Для более сложных зависимостей S-файла-функции, таких как определение исходных файлов в других местоположениях или определении библиотек или объектных файлов, используют rtwmakecfg.m
API, как описано в Использовании rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.
Можно предварительно скомпилировать новые или обновленные библиотеки S-функции (файлы MEX) для модели при помощи функции языка MATLAB rtw_precompile_libs
. Используя заданную модель и спецификацию сборки библиотеки, эта функция создает и размещает библиотеки в предварительно скомпилированную папку библиотеки.
Путем предварительной компиляции библиотек S-функции можно оптимизировать системные сборки. Если ваши предварительно скомпилированные библиотеки существуют, процесс сборки может не использовать компиляцию библиотеки от последующих сборок. Для моделей, которые пользуются многочисленными библиотеками, экономия времени для обработки сборки может быть значительной.
Использовать rtw_precompile_libs
:
Установите суффикс файла библиотеки, включая расширение типа файла, на основе вашей платформы системы.
Рассмотрите определение типа платформы, и затем используйте TargetLibSuffix
параметр, чтобы установить библиотеку снабжает суффиксом соответственно. Например, при применении суффикса для цели GRT, можно установить суффикс на _std.a
для платформы UNIX® и _vcx64.lib
для платформы Windows®.
if isunix suffix = '_std.a'; else suffix = '_vcx64.lib'; end set_param(my_model,'TargetLibSuffix', suffix);
Существует много факторов, которые влияют на предварительно скомпилированный суффикс библиотеки и расширение. Следующая таблица обеспечивает примеры для типичных выборов системного конечного файла, набора инструментальных средств компилятора и других опций, которые влияют на ваш выбор суффикса и расширение. Для получения дополнительной информации исследуйте make-файлы шаблона в matlab/rtw/c/grt
папка или matlab/rtw/c/ert
папка.
Файл TMF | КОМПИЛЯТОР _TOOL_CHAIN значение | Библиотеки предварительного компилятора (PRECOMP_LIBRARIES) | |||
---|---|---|---|---|---|
S-функция суффикса библиотеки (РАСШИРЯЮТ _LIBRARY _NAME значение), | Целое число суффикса библиотеки - только код (РАСШИРЯЮТ _LIBRARY _NAME значение), | Суффикс библиотеки оптимизирует для скорости (РАСШИРЬТЕ _LIBRARY _NAME значение), | Расширение библиотеки (РАСШИРЯЮТ _LIBRARY _NAME значение), | ||
ert_lcc64.tmf | lcc | _rtwsfcn_lcc | _int_ert_lcc | _ert_lcc | .lib |
ert_vcx64.tmf | vcx64 | _rtwsfcn_vcx64 | _int_ert_vcx64 | _ert_vcx64 | .lib |
ert_unix.tmf | unix | _rtwsfcn | _int_ert | _ert | A |
grt_lcc64.tmf | lcc | нет данных | нет данных | _lcc | .lib |
grt_vcx64.tmf | vcx64 | нет данных | нет данных | _vcx64 | .lib |
grt_unix.tmf | unix | нет данных | нет данных | станд | A |
Установите предварительно скомпилированную папку библиотеки.
Используйте один из следующих методов, чтобы установить предварительно скомпилированную папку библиотеки:
Установите TargetPreCompLibLocation
параметр, как описано в Задают Местоположение Предварительно скомпилированных Библиотек.
Установите makeInfo.precompile
поле в rtwmakecfg.m
файл функции. (Для получения дополнительной информации смотрите Использование rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.)
Если вы устанавливаете TargetPreCompLibLocation
и makeInfo.precompile
, установка для TargetPreCompLibLocation
более приоритетен.
Следующие наборы команд предварительно скомпилированная папка библиотеки для модели my_model
к папке lib
под текущей рабочей папкой.
set_param(my_model,'TargetPreCompLibLocation', fullfile(pwd,'lib'));
Примечание
Если вы устанавливаете и целевую папку для предварительно скомпилированных файлов библиотеки и целевой суффикс файла библиотеки, процесс сборки обнаруживает, отсутствуют ли какие-либо предварительно скомпилированные файлы библиотеки при обработке сборок.
Задайте спецификацию сборки.
Настройте структуру, которая задает спецификацию сборки. Следующая таблица описывает поля, которые можно задать в структуре. Эти поля являются дополнительными, за исключением rtwmakecfgDirs
.
Поле | Описание |
---|---|
Массив ячеек из символьных векторов, которые называют папки, содержащие Примечание: заданная модель должна содержать блоки, которые пользуются предварительно скомпилированными библиотеками, заданными | |
Вектор символов, который задает суффикс, включая расширение типа файла, чтобы быть добавленным к имени каждой библиотеки (например, .a или _vc.lib ). Вектор символов должен включать период (.). Необходимо установить суффикс или с этим полем или с TargetLibSuffix параметр. Если вы задаете суффикс с обоими механизмами, TargetLibSuffix установка заменяет установку этого поля. | |
Булев флаг. Когда установлено в истину, флаг указывает, что библиотеки должны быть оптимизированы таким образом, что они скомпилированы из целочисленного кода только. Это поле применяется к целям ERT только. | |
Вектор символов, который задает опцию, которая будет включена в rtwMake командная строка. | |
Массив ячеек структур, которые задают библиотеки, которые будут созданы, которые не заданы
Целевой make-файл (TMF) может задать другие библиотеки и как те библиотеки создаются. Используйте это поле, чтобы предварительно скомпилировать те библиотеки. |
Следующие команды настроенная спецификация сборки build_spec
, который указывает, что файлы, которые будут скомпилированы, находятся в папке src
под текущей рабочей папкой.
build_spec = []; build_spec.rtwmakecfgDirs = {fullfile(pwd,'src')};
Издайте приказ к rtw_precompile_libs
.
Вызов должен задать модель, для которой вы хотите создать предварительно скомпилированные библиотеки и спецификацию сборки. Например:
rtw_precompile_libs(my_model,build_spec);