Чтобы создать исполняемые программы, интегрирующие сгенерированный код и внешний код C или C++, выполните итерацию задач в этой таблице.
Задача | Действие | Дополнительные сведения |
|---|---|---|
1 | Выберите, использовать ли подход к цепочке инструментов или процесс построения шаблона makefile. | Выбор подхода к построению и настройка процесса построения Пример см. в разделе Workflow-процесс построения для систем реального времени. |
2 | Настройте поддержку процесса построения для внешнего кода. | Настройка параметров для интегрированного процесса построения кода |
3 | Настройка поддержки сборки S-Function для внешнего кода. | Поддержка построения S-функций Использовать makecfg для настройки созданных Makefile для S-функций Примеры см. в разделах Вызов внешнего кода C из модели и сгенерированный код и многократно используемый внешний код алгоритма для моделирования и генерации кода. |
4 | Настройте процесс построения для поиска внешнего источника кода, библиотеки и файлов заголовков. | Управление зависимостями файлов процесса построения Управление расположением библиотеки и именованием во время построения |
5 | Настройка пользовательской обработки построения, необходимой для интеграции внешнего кода. | Рабочий процесс настройки процесса построения см. в разделе Настройка обработки построений после создания кода. Чтобы автоматизировать применение настроек построения к построению подхода с помощью цепочки инструментов, см. раздел Настройка процесса построения с помощью sl_customization.m. Чтобы автоматизировать применение настроек построения к шаблону makefile, см. раздел Настройка процесса построения с помощью файла STF_make_rtw_hook. |
В таблице представлено руководство по параметрам конфигурации модели на панели Создание кода (Code Generation) > Пользовательский код (Custom Code) диалогового окна Параметры конфигурации модели (Model Configuration Parameters), которые поддерживают процесс сборки для внешней интеграции кода. Сведения о папках внешнего кода см. в разделе Управление папками процесса построения. Если вы решили поместить внешний код в папку создания кода, см. раздел Сохранение внешних файлов кода в папке построения.
| Кому | Выбрать |
|---|---|
Добавление папок включения, содержащих файлы заголовков, в процесс построения | Дополнительные сведения о построении > Включить каталоги и ввести абсолютные или относительные пути к папкам. При указании относительных путей пути должны быть относительно папки, содержащей файлы модели, а не относительно папки сборки. Порядок, в котором задаются папки, - это порядок, в котором выполняется поиск файлов заголовка, источника и библиотеки. |
Добавление исходных файлов для компиляции и связывания | Дополнительная информация о построении > Исходные файлы и введите полные пути или только имена файлов. Введите только имя файла, если файл находится в текущей папке MATLAB ® или в одной из папок включения. Для каждого указанного дополнительного источника процесс построения расширяет общее правило в файле make шаблона для папки, в которой находится исходный файл . Например, если исходный файл находится в папке
%.obj: buildir\inc\%.c $(CC) -c -Fo$(@F) $(CFLAGS) $< Процесс построения добавляет правила в том порядке, в котором перечислены исходные файлы. |
Добавить библиотеки для связывания | Дополнительные сведения о построении > Библиотеки и введите полные пути или только имена файлов для библиотек. Введите только имя файла, если библиотека находится в текущей папке MATLAB или в одной из папок включения. |
Использовать те же пользовательские настройки кода, что и для моделирования функциональных блоков MATLAB, диаграмм Stateflow ® и блоков таблицы истинности | Использовать те же параметры пользовательского кода, что и для цели моделирования Этот параметр ссылается на панель Цель моделирования (Simulation Target) в диалоговом окне Параметры конфигурации (Configuration Parameters). |
Разрешить модели библиотеки использовать пользовательские параметры кода, уникальные для родительской модели, с которой связана библиотека | Использовать локальные пользовательские настройки кода (не наследовать от основной модели) Этот параметр доступен только для библиотечных моделей, содержащих функциональные блоки MATLAB, диаграммы потока состояний или блоки таблицы истинности. |
По умолчанию процесс построения удаляет файлы из других источников. Вы можете сохранить файлы из других источников, следуя этим инструкциям.
Если поставить .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 ... */ ...
Убедитесь, что написан текст «target specific file», как показано в предыдущем примере, и что текст находится в первой строке исходного файла. Другой текст может появиться до или после этого текста.
Пометка пользовательских файлов таким образом предотвращает постобработку этих файлов для их отступа с созданными исходными файлами. В предыдущих выпусках для создания файлов папок с именами, имеющими шаблон, выполнялся автоматический отступы model_*.c/.cpp (где * был текстовым). Отступы безвредны, но могут привести к различиям, обнаруженным программным обеспечением системы управления версиями, которые потенциально могут вызвать ненужные обновления.
Написанные пользователем S-функциональные блоки обеспечивают мощный способ включения внешнего кода в среду разработки Simulink ®. В большинстве случаев для интеграции существующего внешнего кода с сгенерированным кодом используются S-функции. Существует несколько подходов к написанию S-функций :
S-функции также обеспечивают наиболее гибкий и эффективный способ включения информации о построении для устаревших и пользовательских файлов кода в процесс построения.
Существует несколько способов добавления S-функций в процесс построения.
При построении моделей с S-функциями процесс построения добавляет правила, включая пути и имена исходных файлов в созданный make-файл. Исходные файлы (.h, .c, и .cpp) для S-функции должна находиться в той же папке, что и S-функция MEX-файл. Независимо от того, используется ли для построений подход, основанный на инструментальной цепочке, или подход makefile шаблона, процесс сборки распространяет эту информацию через инструментальную цепочку или makefile шаблона.
Если файл существует в той же папке, что и S-функция MEX-файл (например, sfcnname.h), папка добавляется в путь включения.sfcnname.mexext
Если файл или sfcnname.c существует в той же папке, что и S-функция MEX-file, процесс построения добавляет правило makefile для компиляции файлов из этой папки. sfcnname.cpp
Если S-функция не встроена в файл TLC, процесс построения должен скомпилировать исходный файл S-функции. Чтобы определить имя исходного файла для добавления в список файлов для компиляции, процесс построения выполняет поиск на пути MATLAB. Если исходный файл найден, процесс построения добавляет имя исходного файла в make-файл. Если sfcnname.cpp не найден по пути, процесс построения добавляет имя файла sfcnname.cpp в make-файл, независимо от того, находится ли он на пути MATLAB. sfcnname.c
Примечание
Чтобы механизм Simulink нашел MEX-файл для моделирования и генерации кода, он должен существовать в пути MATLAB или в текущей рабочей папке MATLAB.
Если функция S имеет дополнительные зависимости от исходных файлов, необходимо добавить имена дополнительных модулей в процесс построения. Укажите имена файлов:
В поле S-функциональные модули в диалоговом окне параметра S-Function block
С помощью SFunctionModules параметр в вызове set_param функция
Например, предположим, что вы создаете S-функцию с несколькими модулями.
mex sfun_main.c sfun_module1.c sfun_module2.c
Затем можно добавить модули в процесс сборки, выполнив одно из следующих действий.
В диалоговом окне S-функционального блока укажите sfun_main, sfun_module1, и sfun_module2 в поле S-функциональных модулей.
В командной строке MATLAB введите:
set_param(sfun_block,'SFunctionModules','sfun_module1 sfun_module2')
Можно также определить переменную для представления значения параметра.
modules = 'sfun_module1 sfun_module2'
set_param(sfun_block,'SFunctionModules', modules)Поле S-функциональных модулей и SFunctionModules не поддерживают полные спецификации пути к исходному файлу. Чтобы использовать параметр, генератор кода должен найти дополнительные исходные файлы при выполнении make-файла. Чтобы генератор кода нашел дополнительные файлы, поместите их в ту же папку, что и MEX-файл S-функции. Затем можно воспользоваться поддержкой неявного построения, описанной в разделе Поддержка неявного построения.
Когда вы будете готовы к созданию кода, заставьте генератор кода перестроить верхнюю модель, как описано в разделе Управление регенерацией кода верхней модели.
Для более сложных зависимостей файлов S-функций, таких как указание исходных файлов в других расположениях или определение библиотек или файлов объектов, используйте rtwmakecfg.m API, как описано в разделе Использование API rtwmakecfg.m для настройки созданных Makefiles.
Если встроить S-функцию путем записи файла TLC, можно добавить имена исходных файлов в процесс построения с помощью функции библиотеки TLC. LibAddToModelSources. Дополнительные сведения см. в разделе LibAddSourceFileCustomSection (файл, builtInSection, newSection).
Примечание
Эта функция не поддерживает полные спецификации пути к исходному файлу. Функция предполагает, что генератор кода может найти дополнительные исходные файлы при выполнении make-файла.
Другой полезной функцией библиотеки TLC является LibAddToCommonIncludes. Используйте эту функцию в #include включение файлов заголовков S-функций в сгенерированный model.h файл заголовка. Дополнительные сведения см. в разделе LibAddToCommonIncludes (incFileName).
Для более сложных зависимостей файлов S-функций, таких как указание исходных файлов в других расположениях или определение библиотек или файлов объектов, используйте rtwmakecfg.m API, как описано в разделе Использование API rtwmakecfg.m для настройки созданных Makefiles.
Можно предварительно скомпилировать новые или обновленные библиотеки 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);Существует ряд факторов, влияющих на суффикс и расширение предварительно скомпилированной библиотеки. В следующей таблице приведены примеры типичных вариантов выбора системного целевого файла, цепочки инструментов компилятора и других параметров, влияющих на выбор суффикса и расширения. Для получения дополнительной информации ознакомьтесь с шаблоном создания файлов в matlab/rtw/c/grt папка или matlab/rtw/c/ert папка.
| TMF-файл | Значение _TOOL_CHAIN КОМПИЛЯТОРА | Библиотеки предварительного компилятора (PRECOMP_LIBRARIES) | |||
|---|---|---|---|---|---|
| S-функция библиотечного суффикса (значение EXPAND _LIBRARY _NAME) | Только код библиотечного суффикса (EXPAND _LIBRARY _NAME Value) | Библиотечный суффикс Optimize for Speed (значение EXPAND _LIBRARY _NAME) | Расширение библиотеки (EXPAND _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 | n/a | n/a | _lcc | .lib |
| grt_vcx64.tmf | vcx64 | n/a | n/a | _vcx64 | .lib |
| grt_unix.tmf | Unix | n/a | n/a | _std | .a |
Задайте предварительно скомпилированную папку библиотеки.
Для установки папки предварительно скомпилированной библиотеки используйте один из следующих методов:
Установите TargetPreCompLibLocation , как описано в разделе Указание расположения предварительно скомпилированных библиотек.
Установите makeInfo.precompile поле в rtwmakecfg.m файл функции. (Дополнительные сведения см. в разделе Использование API rtwmakecfg.m для настройки созданных Makefiles.)
Если установить TargetPreCompLibLocation и makeInfo.precompile, настройка для TargetPreCompLibLocation имеет приоритет.
Следующая команда задает папку предварительно скомпилированной библиотеки для модели my_model к папке lib в текущей рабочей папке.
set_param(my_model,'TargetPreCompLibLocation', fullfile(pwd,'lib'));
Примечание
Если задана и целевая папка для предварительно скомпилированных файлов библиотеки, и суффикс целевого файла библиотеки, процесс сборки определяет, отсутствуют ли какие-либо предварительно скомпилированные файлы библиотеки при обработке построений.
Определите спецификацию построения.
Настройка структуры, определяющей спецификацию построения. В следующей таблице описаны поля, которые можно определить в структуре. Эти поля являются необязательными, за исключением rtwmakecfgDirs.
| Область | Описание |
|---|---|
Массив ячеек векторов символов с именами папок, содержащих Примечание.Указанная модель должна содержать блоки, использующие предварительно скомпилированные библиотеки, указанные | |
Символьный вектор, указывающий суффикс, включая расширение типа файла, добавляемый к имени каждой библиотеки (например, .a или _vc.lib). Символьный вектор должен содержать точку (.). Необходимо задать суффикс с помощью этого поля или TargetLibSuffix параметр. Если указан суффикс с обоими механизмами, TargetLibSuffix параметр переопределяет параметр этого поля. | |
| Логический флаг. Если установлено значение true, флаг указывает, что библиотеки должны быть оптимизированы таким образом, что они компилируются только из целочисленного кода. Это поле применяется только к целям ERT. | |
Вектор символов, определяющий опцию, которая должна быть включена в rtwMake командной строки. | |
Массив ячеек структур, задающих библиотеки для построения, которые не определены
Целевой файл makefile (TMF) может указывать другие библиотеки и способ их построения. Это поле используется для предварительной компиляции этих библиотек. |
Следующие команды настраивают спецификацию построения build_spec, что указывает на то, что файлы, подлежащие компиляции, находятся в папке src в текущей рабочей папке.
build_spec = [];
build_spec.rtwmakecfgDirs = {fullfile(pwd,'src')};Выполните вызов для rtw_precompile_libs.
Вызов должен указывать модель, для которой требуется построить предварительно скомпилированные библиотеки, и спецификацию сборки. Например:
rtw_precompile_libs(my_model,build_spec);