Включайте код MATLAB в модели, которые генерируют встраиваемый код С
Simulink / Пользовательские Функции
HDL Coder / Пользовательские Функции
С блоком MATLAB Function можно записать MATLAB® функция для использования в Simulink® модель. Функция MATLAB выполняется для симуляции и генерирует код для цели Simulink Coder™. Если вы плохо знакомы с Simulink и продуктами MATLAB, смотрите, что функции MATLAB Реализации Используют Блоки для обзора.
Двойной клик по блоку MATLAB Function открывает MATLAB Function Block Editor, где вы пишете функцию MATLAB. Модель call_stats_block2
в качестве примера обсужденный в Создают Пользовательскую Функциональность Используя использование блоков MATLAB function следующая функция в MATLAB Function Block Editor:
function [mean,stdev] = stats(vals) % Calculates a statistical mean and a standard % deviation for the values in vals. len = length(vals); mean = avg(vals,len); stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len); plot(vals,'-+'); function mean = avg(array,size) mean = sum(array)/size;
Функция задает входные и выходные данные в операторе объявления функции в качестве аргументов и возвращаемых значений. Значения аргументов и возвращаемые значения предыдущей функции, взятой в качестве примера, соответствуют вводам и выводам блока в call_stats_block2
модель.
Можно также задать данные, добавить входной триггер и создать вызов функции выходные параметры с помощью Model Explorer или Портов и Менеджера данных. Можно получить доступ к Портам и Менеджеру данных в MATLAB Function Block Editor путем нажатия на Edit Data. Для получения дополнительной информации смотрите, Задают Данные о блоке MATLAB function, Управляют Входным Триггером блока MATLAB function и Справляются с Вызовом функции Выходные параметры блока MATLAB function.
Блок MATLAB Function генерирует эффективный встраиваемый код на основе анализа, который определяет размер, класс и сложность каждой переменной. Этот анализ вводит следующие ограничения:
Первое присвоение на переменную задает, размер, класс и сложность.
Смотрите Лучшие практики для Определения Переменных для Генерации кода C/C++.
Вы не можете повторно присвоить переменные свойства после начального присвоения кроме тех случаев, когда с помощью данных переменного размера или снова использовав переменные в коде в различных целях.
Смотрите переназначение переменных свойств.
В дополнение к ограничениям языка блок MATLAB Function поддерживает подмножество функций, доступных в MATLAB. Эти функции включают функции в общие категории, такие как:
Для получения дополнительной информации смотрите Функции и Объекты, Поддержанные для Генерации кода C/C++.
Примечание
Несмотря на то, что код для этого блока пытается привести точно к тем же результатам как MATLAB, различия могут произойти из-за погрешностей округления. Эти числовые различия, которые могут быть некоторыми eps
первоначально, может увеличить после повторенных операций. Уверенность в поведении nan
не рекомендуется. Различные компиляторы C могут привести к различным результатам для того же расчета.
Примечание
Новые блоки MATLAB Function не включают %#codegen
директива, но проверяют ошибки, как будто она включена. Добавление %#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 зарегистрировались в диалоговом окне свойств диаграммы.
В Портах и Менеджере данных, можно объявить, что вход блока параметр Simulink вместо порта. Блок MATLAB Function также поддерживает наследование типов и размера для входных параметров, выходных параметров и параметров. Можно также задать эти свойства явным образом. Смотрите Задают и Изменяют Типы Аргумента функции, Задают Размер Данных о блоке MATLAB function и Конфигурируют Аргументы Данных о Параметре блока MATLAB function для описаний переменных, которые вы используете в блоках MATLAB Function.
Рекурсивные вызовы не позволены в блоках MATLAB Function.
По умолчанию блоки MATLAB Function имеют прямое включенное сквозное соединение. Чтобы отключить его, очистите свойство Allow direct feedthrough. Непрямая проходная семантика гарантирует, что выходные параметры полагаются только на текущее состояние. Используя непрямое сквозное соединение позволяет вам использовать блоки MATLAB Function в обратной связи и предотвратить алгебраические циклы. Для получения дополнительной информации смотрите Использование Непрямое Сквозное соединение в блоке MATLAB function.
Типы данных |
|
Прямое сквозное соединение |
|
Многомерные сигналы |
|
Сигналы переменного размера |
|
Обнаружение пересечения нулем |
|
[a] Фактическая поддержка типа данных или возможности зависит от реализации блока. |