S-функции используются для расширения поддержки Simulink ® для моделирования и создания кода. Например, их можно использовать для:
Представление пользовательских алгоритмов
Интерфейс существующего внешнего кода с моделью Simulink и сгенерированным кодом
Представлять драйверы устройств для взаимодействия с оборудованием
Создание оптимизированного кода для встраиваемых систем
Проверка кода, созданного для подсистемы в рамках моделирования Simulink
Интерфейс прикладных программ (API) для написания S-функций позволяет реализовать универсальные алгоритмы в среде Simulink с большой гибкостью. Если предполагается использовать S-функции в модели для генерации кода, уровень гибкости может варьироваться. Например, невозможно получить доступ к рабочей области MATLAB ® из S-функции, используемой с генератором кода. В этом разделе поясняются условия использования S-функций. Однако с помощью методов, представленных в этом разделе, можно создать S-функции для большинства приложений, работающих с сгенерированным кодом.
Хотя S-функции обеспечивают универсальное и гибкое решение для реализации сложных алгоритмов в модели, базовый API несет издержки с точки зрения памяти и вычислительных ресурсов. Чаще всего дополнительные ресурсы приемлемы для систем быстрого прототипирования в реальном времени. Однако часто дополнительные ресурсы недоступны во встроенных приложениях реального времени. Вы можете минимизировать требования к памяти и вычислениям, используя технологию компилятора целевого языка, поставляемую вместе с генератором кода для встраивания ваших S-функций. При создании S-функции для существующего внешнего кода рассмотрите возможность использования Legacy Code Tool для создания S-функции и соответствующего файла TLC.
В этом разделе предполагается понимание следующих понятий:
Level-2 S-функции
Сценарий компилятора целевого языка (TLC)
Как генератор кода создает и строит код C/C + +
Примечания
Эта информация предназначена для пользователей генератора кода. Даже если вы в настоящее время не используете генератор кода, следуйте этим рекомендациям при написании S-функций, особенно если вы создаете S-функции общего назначения.
Примеры, для которых можно реализовать S-функцию для моделирования и генерации кода:
"Меня не волнует эффективность. Я хочу написать одну версию моего алгоритма и заставить его работать в продуктах Simulink и генератора кода автоматически ".
«Я хочу реализовать высокооптимизированный алгоритм в продуктах Simulink и генератора кода, который выглядит как встроенный блок и генерирует эффективный код».
"У меня много написанного вручную кода, который мне нужен для взаимодействия. Я хочу эффективно вызывать свою функцию из продуктов Simulink и генератора кода ".
Соответственно, предшествующие ситуации соответствуют следующей терминологии MathWorks ®:
Неинлинированная S-функция
Встроенная S-функция
Автоматически генерируемая S-функция для внешнего кода
Неинлинная S-функция - это C или C++ MEX S-функция, которая обрабатывается одинаково механизмом Simulink и генерируется кодом. Как правило, алгоритм реализуется один раз в соответствии с API S-функции. Механизм Simulink и сгенерированный код вызывают подпрограммы S-функции (например, mdlOutputs) во время выполнения модели.
Для каждого экземпляра неинлинного S-функционального блока требуются дополнительные память и вычислительные ресурсы. Однако эта процедура включения алгоритмов в модели и приложения для генерации кода является типичной на этапе прототипирования проекта, где эффективность не важна. Преимущество отказа от эффективности заключается в способности быстро изменять параметры и структуры модели.
Запись неинлинной S-функции не включает в себя TLC-кодирование. Неинлинизированные S-функции - это случай по умолчанию для процесса сборки в том смысле, что после построения MEX S-функции в модели нет дополнительной подготовки перед нажатием клавиш Ctrl + B для построения модели.
Существуют некоторые ограничения в отношении имен и расположений неинлинговых файлов S-функций при создании makefile. См. раздел Запись неинлинированной S-функции.
Для работы S-функций в среде Simulink создается некоторый служебный код. Когда генератор кода создает код из моделей, содержащих S-функции (без ), он встраивает часть этого служебного кода в сгенерированный код. Если требуется оптимизировать код в реальном времени и исключить часть кода накладных расходов, необходимо встроить (или внедрить) S-функции. Это включает запись TLC (sfunction.tlc) файл, который исключает служебный код из созданного кода. Процессы компилятора целевого языка sfunction.tlc файлы для определения того, как встроить алгоритм S-функции в сгенерированный код.sfunction.tlc
Примечание
Не путайте термин inline с ключевым словом C++ inline. Встроенный означает указание текста вместо вызова общих процедур API S-функции (например, mdlOutputs). Например, когда файл TLC используется для встраивания S-функции, сгенерированный код содержит код C/C + +, который обычно появляется в подпрограммах S-функции и саму S-функцию, которая была удалена из процесса построения.
Полностью встроенная S-функция строит алгоритм (блок) в сгенерированный код способом, неотличимым от встроенного блока. Как правило, полностью встроенная S-функция требует реализации алгоритма дважды: один раз для модели Simulink (C/C + + MEX S-функция) и один раз для генерации кода (файл TLC). Сложность файла TLC зависит от сложности алгоритма и уровня эффективности, которую вы пытаетесь достичь в сгенерированном коде. TLC-файлы отличаются от простых до сложных по структуре. См. раздел Вложение S-функций.
Если в модели необходимо вызвать написанный вручную код C/C + +, рекомендуется использовать инструмент Simulink Legacy Code Tool. Legacy Code Tool может автоматизировать создание полностью встроенной S-функции и соответствующего файла TLC на основе информации, которая регистрируется в структуре данных Legacy Code Tool.
Дополнительные сведения см. в разделах Интеграция функций C с использованием прежнего кода и Импорт вызовов внешнего кода в сгенерированный код с помощью прежнего кода.
В этом разделе кратко описываются файлы и функции, необходимые для создания неинлинговых и встроенных S-функций.
Для неинлинных S-функций требуется исходный код C или C++ MEX S-функции ( или sfunction.c). sfunction.cpp
Полностью встроенные S-функции требуют файл. Полностью встроенные S-функции обеспечивают оптимальный код для параметризованной S-функции. Это S-функция, которая работает в определенном режиме в зависимости от фиксированных параметров S-функции, которые не изменяются во время выполнения модели. Для данного режима работы, sfunction.tlc указывает точный код, который создается для реализации алгоритма для этого режима. Например, таблица поиска прямого индекса S-function в записи полностью встроенных S-функций с подпрограммой mdlRTW содержит два режима работы - один для равномерно распределенных sfunction.tlcx-data и один для неравномерно разнесенных x-data.
Примечание
Полностью встроенные S-функции, создаваемые для вызова устаревшего или пользовательского кода C/C + +, также требуют , который создается с помощью инструмента Legacy Code Tool.sfunction.tlc
Полностью встроенные S-функции могут потребовать размещения mdlRTW подпрограмма в файле MEX с S-функцией или sfunction.c. sfunction.cppmdlRTW подпрограмма позволяет размещать информацию в . model.rtw является файлом записи, который определяет модель и который генератор кода вызывает компилятор целевого языка для обработки перед выполнением model.rtw при формировании кода.sfunction.tlc
Включая mdlRTW процедура полезна, если требуется ввести в файл TLC неперестраиваемые параметры. Такие параметры используются для определения того, какой рабочий режим активен в данном экземпляре S-функции. На основе этой информации файл TLC для S-функции может генерировать высокоэффективный оптимальный код для этого режима работы.
С генерацией кода можно использовать C/C + + MEX, язык MATLAB и S-функции Fortran MEX.
Для создания кода можно встроить S-функции, предоставив встроенный файл TLC. См. раздел Вложение S-функции в компилятор целевого языка. Функции MATLAB и Fortran MEX S должны быть встроены. S-функции C/C + + MEX могут быть встроены для эффективности кода или не встроены.
Чтобы автоматически создать полностью встроенную C MEX S-функцию для вызова устаревшего или пользовательского кода, используйте инструмент Legacy Code Tool. Дополнительные сведения см. в разделах Интеграция функций C с использованием прежнего кода и Импорт вызовов внешнего кода в сгенерированный код с помощью прежнего кода.
Если эффективность кода не является преобладающим фактором, например, при быстром создании прототипов можно отказаться от встраивания C/C + + MEX S-функции. Дополнительные сведения см. в разделе Запись неинлинированной S-функции.