Включите код MATLAB в модели, которые генерируют встраиваемый код С
Simulink/Пользовательские функции
HDL-кодер/пользовательские функции
С помощью блока MATLAB Function можно записать MATLAB® функция для использования в Simulink® модель. Функция MATLAB, которую вы создаете, выполняет для симуляции и генерирует код для цели Simulink Coder™. Если вы новичок в продуктах Simulink и MATLAB, смотрите Реализацию функций MATLAB с использованием блоков и Создайте Пользовательские функции с помощью Блока MATLAB function для обзора.
Двойной клик по блоку MATLAB Function открывает его редактор, где вы записываете функцию MATLAB, как в этом примере:
Дополнительные сведения об этом редакторе см. в разделе Блока MATLAB function Editor.
Вы задаете входные и выходные данные для блока MATLAB Function в заголовке функции в качестве аргументов и возвращаемых значений. Аргумент и возвращаемые значения предыдущей функции , взятой в качестве примера, соответствуют входам и выходам блока в модели:
Можно также задать данные, триггеры ввода и выходов вызова функции с помощью Ports and Data Manager, к которым вы получаете доступ из Блока MATLAB function Редактора путем выбора Edit Data. См. раздел «Порты и диспетчер данных».
Блок MATLAB Function генерирует эффективный встраиваемый код на основе анализа, который определяет размер, класс и сложность каждой переменной. Этот анализ накладывает следующие ограничения:
Первое назначение переменной определяет ее, размер, класс и сложность.
Смотрите Лучшие практики для определения переменных для генерации кода C/C + +.
Вы не можете переназначить свойства переменной после начального назначения, за исключением случаев, когда используются данные переменного размера или переиспользуются переменные в коде для других целей.
В дополнение к языковым ограничениям блок MATLAB Function поддерживает подмножество функций, доступных в MATLAB. Список поддерживаемых функций приведен в разделах Функции и Объекты, Поддерживаемые для Генерации кода C/C + +. Эти функции включают функции в общих категориях, таких как:
Арифметические операторы, такие как plus
, minus
, и power
. Для получения дополнительной информации смотрите Array vs. Матричные операции.
Расширенные матричные операции, такие как lu
, inv
, svd
, и chol
Примечание
Несмотря на то, что код для этого блока пытается получить точно такие же результаты, как и MATLAB, различия могут возникнуть из-за ошибок округления. Эти числовые различия, которые могут быть несколькими eps
первоначально может увеличиться после повторных операций. Опора на поведение nan
не рекомендуется. Различные компиляторы C могут давать различные результаты для тех же расчетов.
Примечание
В блоке MATLAB Function, %#codegen
директива включена, чтобы подчеркнуть, что алгоритм MATLAB блока всегда предназначен для генерации кода. The %#codegen
директива, или ее отсутствие, не изменяет поведение проверки ошибок в контексте блока MATLAB Function. Для получения дополнительной информации смотрите Директиву компиляции% # codegen.
Чтобы поддержать визуализацию данных, блок MATLAB Function поддерживает вызовы функций MATLAB только для симуляции. Смотрите Использование MATLAB Engine для выполнения вызова функции в сгенерированном коде, чтобы понять некоторые ограничения этой возможности и как она интегрируется с анализом кода для этого блока. Если эти вызовы функций не влияют непосредственно ни на один из входов или выходов Simulink, вызовы не появляются в сгенерированном коде Simulink Coder.
Из MATLAB Function блоков можно также вызвать функции, определенные в блоке Simulink Function. Можно вызвать Stateflow® функции с Export Chart Level Functions (Make Global) и Allow exported functions to be called by Simulink, отмеченными в диалоговом окне Свойств графика».
В Ports and Data Manager можно объявить вход блока параметром Simulink вместо порта. Блок MATLAB Function также поддерживает наследование типов и размера для входов, выходов и параметров. Можно также задать эти свойства явным образом. Смотрите Type Аргументы Функции, Size Function Arguments и Add Parameter Arguments для описания переменных, которые вы используете в MATLAB Function блоках.
Рекурсивные вызовы не разрешены в блоках MATLAB Function.
По умолчанию MATLAB Function блоки имеют активированное прямое сквозное соединение. Чтобы отключить его, в Диспетчере портов и данных снимите флажок Allow direct feedthrough. Недирект исходной семантики гарантирует, что выходы зависят только от текущего состояния. Использование nondirect feedthrough позволяет вам использовать блоки MATLAB Function в цикле обратной связи и предотвращать алгебраические циклы. Для получения дополнительной информации смотрите Использование Nondirect Feedthrough в блоке MATLAB function.
Типы данных |
|
Прямое сквозное соединение |
|
Многомерные сигналы |
|
Сигналы переменного размера |
|
Обнаружение пересечения нулем |
|
[a] Фактический тип данных или поддержка возможностей зависит от реализации блоков. |