exponenta event banner

Преимущества встроенных S-функций

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

Хотя алгоритмы переключения являются желательной особенностью на этапе проектирования системы, когда приходит время генерировать код, этот тип гибкости часто падает в пользу оптимальной скорости вычисления и размера кода. Компилятор целевого языка предназначен для создания компактного и быстрого кода путем выборочного создания только кода, необходимого для одного экземпляра набора параметров блока.

Когда следует избегать встраивания

Вы можете принять решение не вставлять S-функции C MEX, которые имеют:

  • Мало числовых параметров или нет.

  • Один алгоритм, который уже зафиксирован в способности. Например, он не имеет дополнительных режимов или альтернативных алгоритмов.

  • Поддержка только одного типа данных.

  • Значительный или большой размер кода в mdlOutputs() функция.

  • Несколько экземпляров блока S-Function в моделях.

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

В качестве альтернативы можно использовать гибридный метод встраивания, известный как S-функция С-MEX, где целевой файл блока просто генерирует вызов пользовательской кодовой функции, которую сама S-функция также вызывает. Этот подход может быть оптимальным решением для генерации кода в случае большого фрагмента существующего кода. Описание процедуры и пример обернутой S-функции см. в разделах Write Wrapper S-Function и TLC-Files.

Процесс встраивания

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

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

Выбор алгоритма и параметры для каждого блока выводятся в начальной фазе процесса формирования кода из зарегистрированного набора параметров S-функции или mdlRTW() функция (если присутствует), которая приводит к записям в модели .rtw для этого блока во время генерации кода. Затем вызывается файл, написанный на целевом языке для блока, для считывания записей в model.rtw и вычислить сгенерированный код для этого экземпляра блока. Этот код TLC содержится в целевом файле блока.

Один особый случай для встроенных S-функций - это случай блоков ввода-вывода и драйверов, таких как аналого-цифровые преобразователи или порты связи. Для моделирования драйвер ввода-вывода обычно кодируется в S-функции как чистый источник, сквозной канал или чистый приемник. Однако в сгенерированном коде должен быть создан фактический интерфейс с устройством ввода-вывода, обычно посредством прямого кодирования с общим _in(), _out() функции, встроенный код сборки или определенный набор вызовов библиотеки ввода-вывода, уникальных для устройства и целевой среды.

Алгоритм поиска для поиска файлов TLC

Компилятор целевого языка использует следующий порядок поиска для поиска файлов TLC:

  1. Текущая папка.

  2. Расположения, указанные %addincludepath директивы. Компилятор оценивает несколько %addincludepath директивы снизу вверх.

  3. Расположения, указанные -I варианты. Компилятор оценивает несколько -I справа налево.

Для встроенных файлов TLC S-функций процесс сборки поддерживает следующие расположения:

  • Папка, в которой находится исполняемый файл S-функции (MEX или MATLAB ®).

  • Подпапка папки S-функций ./tlc_c (для целевых языков C или C++).

  • Текущая папка при запуске процесса построения.

    Примечание

    Примечание.Размещение встроенного файла S-функции TLC в другом месте не поддерживается, даже если местоположение находится в пути включения TLC.

При обработке S-функции используется первый конечный файл с требуемым именем, реализующий указанный язык model.rtw запись файла.

Примечание

Компилятор не выполняет поиск по пути MATLAB и не находит файл, доступный только по этому пути. Компилятор выполняет поиск только описанных выше расположений.

Доступность для встраиваемых и неинлинирующих систем

S-функции могут быть написаны на языке MATLAB, Fortran, C и C++. Включение TLC S-функций доступно, как показано в этой таблице.

Встроенная поддержка TLC по типу S-функции

Тип S-функцииПоддержка неинлайнингаПоддерживается встраивание

Язык MATLAB

Нет

Да

Фортран MEX

Нет

Да

C

Да

Да

C++

Да

Да

Связанные темы