Создайте интегрированный код в окружении Simulink

Рабочий процесс

Чтобы создать исполняемые программы, которые интегрируют сгенерированный код и внешний C или Код С++, выполните итерации через задачи в этой таблице.

Задача

Действие

Больше информации

1

Выберите, использовать ли подход набора инструментальных средств или обработать процесс сборки подхода make-файла по шаблону.

Выберите Build Approach и Configure Build Process

Для примера смотрите Рабочий процесс Процесса сборки для Систем реального времени.

2

Сконфигурируйте поддержку процесса сборки своего внешнего кода.

Сконфигурируйте параметры для интегрированного процесса сборки кода

3

Сконфигурируйте поддержку сборки S-функции своего внешнего кода.

Создайте поддержку S-функций

Используйте makecfg, чтобы Настроить Сгенерированные Make-файлы для S-функций

Для примеров смотрите Вызов Внешний код С из Типового кодекса и Сгенерированного кода и Вызова Допускающий повторное использование Внешний Код алгоритма для Симуляции и Генерации кода.

4

Сконфигурируйте процесс сборки, чтобы найти внешний источник кода, библиотеку и заголовочные файлы.

Управляйте зависимостями от файла процесса сборки

Управляйте местоположением библиотеки и называющий во время сборки

5

Настройте сделанную на заказ обработку, требуемую для вашей внешней интеграции кода.

Для рабочего процесса индивидуальной настройки процесса сборки смотрите, Настраивают Обработку Сборки Постгенерации кода.

Чтобы автоматизировать применение индивидуальных настроек сборки к сборке подхода набора инструментальных средств, смотрите, Настраивают Процесс сборки с sl_customization.m.

Чтобы автоматизировать применение индивидуальных настроек сборки к сборке подхода make-файла шаблона, смотрите, Настраивают Процесс сборки с Файлом STF_make_rtw_hook.

Сконфигурируйте параметры для интегрированного процесса сборки кода

Таблица предоставляет руководство по параметрам конфигурации, которые поддерживают процесс сборки для внешней интеграции кода. Для получения информации о папках для вашего внешнего кода смотрите, Управляют Папками Процесса сборки. Если вы принимаете решение поместить свой внешний код в папку Генерации кода (Simulink), смотрите Заповедник Внешние Файлы кода в Папке Сборки.

КВыбрать

Добавьте включают папки, которые содержат заголовочные файлы к процессу сборки

Configuration Parameters> Code Generation> Custom Code> Additional build information> Include directories, и вводит абсолютные или относительные пути в папки.

Если вы задаете относительные пути, пути должны быть относительно папки, содержащей ваши образцовые файлы, не относительно папки сборки. Порядок, в котором вы задаете папки, является порядком, в котором они ищутся заголовок, источник и файлы библиотеки.

Добавьте исходные файлы, которые будут скомпилированы и соединены

Configuration Parameters> Code Generation> Custom Code> Additional build information> Source files, и вводит полные пути или только имена файлов для файлов.

Введите только имя файла, если файл находится в текущей папке MATLAB® или в одной из включать папок. Для каждого дополнительного источника, который вы задаете, процесс сборки расширяет типичное правило в make-файле шаблона для папки, в которой расположен исходный файл. Например, если исходный файл расположен в папке inc, процесс сборки добавляет правило, подобное следующему:

%.obj: buildir\inc\%.c
            $(CC) -c -Fo$(@F) $(CFLAGS) $<

Процесс сборки добавляет правила в порядке, что вы перечисляете исходные файлы.

Добавьте библиотеки, которые будут соединены

Configuration Parameters> Code Generation> Custom Code> Additional build information> Libraries, и вводит полные пути или только имена файлов для библиотек.

Введите только имя файла, если библиотека расположена в текущей папке MATLAB или в одной из включать папок.

Используйте те же настройки пользовательского кода в качестве заданных для симуляции блоков MATLAB function, графиков Stateflow® и блоков Таблицы истинности

Configuration Parameters> Code Generation> Custom Code> Use the same custom code settings as Simulation Target

Примечание

Этот параметр относится к панели Simulation Target в диалоговом окне Configuration Parameters.

Позвольте модели библиотеки использовать настройки пользовательского кода, уникальные от родительской модели, до которой соединяется библиотека

Configuration Parameters> Code Generation> Custom Code> Use local custom code settings (do not inherit from main model)

Примечание

Этот параметр доступен только для моделей библиотеки, которые содержат блоки MATLAB function, диаграммы Stateflow или блоки Таблицы истинности.

Сохраните внешние файлы кода в папке сборки

По умолчанию процесс сборки удаляет внешние исходные файлы. Можно сохранить внешние исходные файлы следующим эти инструкции.

Если вы помещаете .c/.cpp или исходный файл .h в папке сборки, и вы хотите препятствовать тому, чтобы генератор кода удалил его во время процесса генерации кода TLC, вставил текст target specific file в первую строку файла .h или .c/.cpp. Например:

/*  COMPANY-NAME target specific file
 *
 *   This file is created for use with the 
 *   COMPANY-NAME target.
 *   It is used for ...
 */
...

Убедитесь, что вы записываете текст, “предназначаются для определенного файла” как показано в предыдущем примере, и что текст находится в первой строке исходного файла. Другой текст может появиться прежде или после этого текста.

Отмечающие пользовательские файлы этим способом предотвращают постобработку этих файлов, чтобы расположить их с отступом со сгенерированными исходными файлами. Автоматический отступ произошел в предыдущих релизах, чтобы создать файлы папки с именами, имеющими шаблон model _*.c/.cpp (где * был текстом). Расположение с отступом безопасно, но может вызвать различия, обнаруженные программным обеспечением системы контроля версий, которое может потенциально инициировать ненужные обновления.

Создайте поддержку S-функций

Написанные пользователем Блоки s-function обеспечивают мощный способ включить внешний код в среду разработки Simulink®. В большинстве случаев вы используете S-функции, чтобы интегрировать существующий внешний код со сгенерированным кодом. Несколько подходов к записи S-функций доступны:

S-функции также обеспечивают самый гибкий и способный способ включать информацию о сборке для наследия и файлов пользовательского кода в процессе сборки.

Существуют различные способы добавить S-функции в процесс сборки.

Неявная поддержка сборки

При создавании моделей с S-функциями процесс сборки добавляет правила, включайте пути и имена исходного файла к сгенерированному make-файлу. Исходные файлы (.h, .c и .cpp) для S-функции должны быть в той же папке как файл MEX S-функции. Использовать ли ли подход набора инструментальных средств или подход make-файла шаблона для сборок, процесс сборки распространяет эту информацию через make-файл шаблона или набор инструментальных средств.

  • Если файл, sfcnname.h существует в той же папке как файл MEX S-функции (например, sfcnname.mexext), папка, добавляется к включать пути.

  • Если файл, sfcnname.c или sfcnname.cpp существуют в той же папке как файл MEX S-функции, процесс сборки, добавляет правило make-файла для компиляции файлов от той папки.

  • Когда S-функция не встраивается с файлом TLC, процесс сборки должен скомпилировать исходный файл S-функции. Чтобы определить имя исходного файла, чтобы добавить к списку файлов, чтобы скомпилировать, процесс сборки ищет sfcnname.cpp на пути MATLAB. Если исходный файл найден, процесс сборки добавляет имя исходного файла к make-файлу. Если sfcnname.cpp не найден на пути, процесс сборки добавляет имя файла sfcnname.c в make-файл, является ли это на пути MATLAB.

    Примечание

    Для механизма Simulink, чтобы найти файл MEX для симуляции и генерации кода, это должно существовать на пути MATLAB или существовать в нашем текущем MATLAB рабочая папка.

Задайте дополнительные исходные файлы для S-функции

Если ваша 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-функции. Можно затем усилить неявную поддержку сборки, описанную в Неявной Поддержке Сборки.

Когда вы будете готовы сгенерировать код, обеспечьте генератор кода, чтобы восстановить топ-модель, как описано в Регенерации Управления Кода Топ-модели (Simulink Coder).

Для более сложных зависимостей S-файла-функции, таких как определение исходных файлов в других местоположениях или определении библиотек или объектных файлов, используют API rtwmakecfg.m, как описано в Использовании rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.

Используйте библиотечные функции TLC

Если вы встраиваете свою S-функцию путем записывания файла TLC, можно добавить имена исходного файла к процессу сборки при помощи библиотечной функции TLC LibAddToModelSources. Для получения дополнительной информации смотрите LibAddSourceFileCustomSection (файл, builtInSection, newSection) (Simulink Coder).

Примечание

Эта функция не поддерживает полные спецификации пути к исходному файлу. Функция принимает, что генератор кода может найти дополнительные исходные файлы при выполнении make-файла.

Другой полезной библиотечной функцией TLC является LibAddToCommonIncludes. Используйте эту функцию в операторе #include, чтобы включать заголовочные файлы S-функции в сгенерированный model заголовочный файл .h. Для получения дополнительной информации смотрите LibAddToCommonIncludes (incFileName) (Simulink Coder).

Для более сложных зависимостей S-файла-функции, таких как определение исходных файлов в других местоположениях или определении библиотек или объектных файлов, используют API rtwmakecfg.m, как описано в Использовании rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.

Предварительно скомпилируйте библиотеки S-функции

Можно предварительно скомпилировать новые или обновленные библиотеки S-функции (файлы MEX) для модели при помощи функции языка MATLAB rtw_precompile_libs. Используя заданную модель и спецификацию сборки библиотеки, эта функция создает и размещает библиотеки в предварительно скомпилированную папку библиотеки.

Путем предварительной компиляции библиотек S-функции можно оптимизировать системные сборки. Если ваши предварительно скомпилированные библиотеки существуют, процесс сборки может не использовать компиляцию библиотеки от последующих сборок. Для моделей, которые пользуются многочисленными библиотеками, экономия времени для обработки сборки может быть значительной.

Использовать rtw_precompile_libs:

  1. Установите суффикс файла библиотеки, включая расширение типа файла, на основе вашей платформы системы.

    Рассмотрите определение типа платформы, и затем используйте параметр 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.tmflcc_rtwsfcn_lcc_int_ert_lcc_ert_lcc.lib
    ert_vcx64.tmfvcx64_rtwsfcn_vcx64_int_ert_vcx64_ert_vcx64.lib
    ert_unix.tmfunix_rtwsfcn_int_ert_ertA
    grt_lcc64.tmflccнет данныхнет данных_lcc.lib
    grt_vcx64.tmfvcx64нет данныхнет данных_vcx64.lib
    grt_unix.tmfunixнет данныхнет данныхстандA
  2. Установите предварительно скомпилированную папку библиотеки.

    Используйте один из следующих методов, чтобы установить предварительно скомпилированную папку библиотеки:

    Если вы устанавливаете TargetPreCompLibLocation и makeInfo.precompile, установка для TargetPreCompLibLocation более приоритетна.

    Следующие наборы команд предварительно скомпилированная папка библиотеки для модели my_model к папке lib под текущей рабочей папкой.

    set_param(my_model,'TargetPreCompLibLocation', fullfile(pwd,'lib'));

    Примечание

    Если вы устанавливаете и целевую папку для предварительно скомпилированных файлов библиотеки и целевой суффикс файла библиотеки, процесс сборки обнаруживает, отсутствуют ли какие-либо предварительно скомпилированные файлы библиотеки при обработке сборок.

  3. Задайте спецификацию сборки.

    Настройте структуру, которая задает спецификацию сборки. Следующая таблица описывает поля, которые можно задать в структуре. Эти поля являются дополнительными, за исключением rtwmakecfgDirs.

    Поле Описание

    rtwmakecfgDirs

    Массив ячеек из символьных векторов, которые называют папки, содержащие файлы rtwmakecfg для библиотек, которые будут предварительно скомпилированы. Функция использует Name и элементы Location makeInfo.library, как возвращено rtwmakecfg, чтобы задать название и местоположение предварительно скомпилированных библиотек. Если вы устанавливаете параметр TargetPreCompLibLocation, чтобы задать папку библиотеки, та установка заменяет установку makeInfo.library.Location.

    Примечание: заданная модель должна содержать блоки, которые пользуются предварительно скомпилированными библиотеками, заданными файлами rtwmakecfg, потому что преобразование TMF к make-файлу генерирует правила библиотеки, только если процесс сборки пользуется библиотеками.

    libSuffix

    Вектор символов, который задает суффикс, включая расширение типа файла, чтобы быть добавленным к имени каждой библиотеки (например, .a или _vc.lib). Вектор символов должен включать период (.). Необходимо установить суффикс или с этим полем или с параметром TargetLibSuffix. Если вы задаете суффикс с обоими механизмами, установка TargetLibSuffix заменяет установку этого поля.

    intOnlyBuild

    Булев флаг. Когда установлено в истину, флаг указывает, что библиотеки должны быть оптимизированы таким образом, что они скомпилированы из целочисленного кода только. Это поле применяется к целям ERT только.

    makeOpts

    Вектор символов, который задает опцию, которая будет включена в командную строку rtwMake.

    addLibs

    Массив ячеек структур, которые задают библиотеки, которые будут созданы, которые не заданы функцией rtwmakecfg. Каждая структура должна быть задана с двумя полями, которые являются символьными массивами:

    • libname имя библиотеки без суффикса

    • libLoc — местоположение для предварительно скомпилированной библиотеки

    Целевой make-файл (TMF) может задать другие библиотеки и как те библиотеки создаются. Используйте это поле, чтобы предварительно скомпилировать те библиотеки.

    Настроенный build_spec спецификации сборки следующих команд, который указывает, что файлы, которые будут скомпилированы, находятся в папке src под текущей рабочей папкой.

    build_spec = [];
    build_spec.rtwmakecfgDirs = {fullfile(pwd,'src')};
  4. Издайте приказ к rtw_precompile_libs.

    Вызов должен задать модель, для которой вы хотите создать предварительно скомпилированные библиотеки и спецификацию сборки. Например:

    rtw_precompile_libs(my_model,build_spec);

Похожие темы