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

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

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

Задача

Действие

Дополнительная информация

1

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

Выберите подход к сборке и настройте процесс сборки

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

2

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

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

3

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

Поддержка создания 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-файла шаблона для папки, в которой находится исходный файл. Например, если исходный файл расположен в папке incпроцесс сборки добавляет правило, аналогичное следующему:

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

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

Добавьте библиотеки для связи

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

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

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

Use the same custom code settings as Simulation Target

Этот параметр относится к панели Simulation Target в диалоговом окне Параметров конфигурации.

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

Use local custom code settings (do not inherit from main model)

Этот параметр доступен только для библиотечных моделей, которые содержат блоки MATLAB Function, диаграммы Stateflow или блоки Truth Table.

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

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

Если поставить .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-функций

Пользовательские блоки 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-функции. Затем можно использовать неявную поддержку сборки, описанную в Implicit Build Support.

Когда вы готовы сгенерировать код, заставьте генератор кода перестроить верхнюю модель, как описано в Control Regeneration of Top Model Code.

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

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

Если вы вводите свою S-функцию путем записи TLC-файла, можно добавить имена исходных файлов в процесс сборки с помощью функции библиотеки TLC LibAddToModelSources. Для получения дополнительной информации см. Lib Add Source File Custom Section (файл, build In Section, new Section).

Примечание

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

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

Для более сложных зависимостей файла S-функции, таких как установка исходных файлов в других расположениях или установка библиотек или файлов объектов, используйте rtwmakecfg.m API, как описано в разделе Использование 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);

    Существует ряд факторов, которые влияют на предварительно скомпилированный суффикс библиотеки и расширение. В следующей таблице приведены примеры типичных вариантов выбора системного целевого файла, набора инструментов компилятора и других опций, которые влияют на ваш выбор суффикса и расширения. Для получения дополнительной информации исследуйте файлы создания шаблонов в matlab/rtw/c/grt папка или matlab/rtw/c/ert папка.

    Файл TMFЗначение _TOOL_CHAIN компилятораБиблиотеки предкомпилятора (PRECOMP_LIBRARIES)
    Суффикс библиотеки S-Function (РАСШИРЕНИЕ _LIBRARY _NAME значение) Целое число суффикса библиотеки - только код (EXPAND _LIBRARY _NAME Value)Библиотечный суффикс оптимизируйте для скорости (EXPAND _LIBRARY _NAME Value)Расширение библиотеки (EXPAND _LIBRARY _NAME Value)
    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_ert.a
    grt_lcc64.tmflccn/an/a_lcc.lib
    grt_vcx64.tmfvcx64n/an/a_vcx64.lib
    grt_unix.tmfUnixn/an/a_std.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

    Логический флаг. Когда установлено значение true, флаг указывает, что библиотеки должны быть оптимизированы таким образом, чтобы они компилировались только из целочисленного кода. Это поле применяется только к целям 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);

Похожие темы