При создании MATLAB существуют особые факторы® функции, которые предназначены для генерации кода. К ним относятся определенные ограничения при использовании varargin
и varargout
, рекурсивные функции, анонимные функции и вложенные функции. Чтобы сгенерировать код для рекурсивных функций MATLAB, генератор кода использует рекурсию во время компиляции или рекурсию во время выполнения. Чтобы создать эффективный код C/C + +, генератор кода иногда создает несколько версий функции, называемой специализацией функции. В некоторых случаях можно предотвратить создание генератором кода специализаций функций при помощиcoder.ignoreConst
и coder.ignoreSize
. При генерации MEX-функции можно обойти генерацию кода для определенной функции в коде MATLAB и вместо этого использовать движок MATLAB для выполнения вызова. Для этого используйте coder.extrinsic
конструировать.
coder.extrinsic | Объявите функцию как внешнюю и выполните ее в MATLAB |
coder.ignoreConst | Предотвратите использование постоянного значения выражения для специализаций функции |
coder.ignoreSize | Предотвратите создание генератором кода специализаций функций для выражений постоянного размера |
Директива компиляции% # codegen
Укажите, что функция MATLAB предназначена для генерации кода.
Генерация кода для списков аргументов переменной длины
Сгенерируйте код для varargin
и varargout
.
Генерация кода для рекурсивных функций
Используйте рекурсивные функции в коде MATLAB, который предназначен для генерации кода.
Принудительный генератор кода для использования рекурсии во время выполнения
Перепишите код MATLAB так, чтобы генератор кода использовал рекурсию во время выполнения вместо рекурсии во время компиляции.
Генерация кода для анонимных функций
Используйте анонимные функции в коде MATLAB, предназначенные для генерации кода.
Генерация кода для вложенных функций
Используйте вложенные функции в коде MATLAB, предназначенные для генерации кода.
Разрешение вызовов функций для генерации кода
Генератор кода использует правила приоритета для разрешения вызовов функций.
Разрешение типов файлов на пути генерации кода
Генератор кода использует правила приоритета для разрешения типов файлов.
Используйте MATLAB Engine для выполнения вызова функции в сгенерированном коде
Если функция не поддерживается для генерации кода, объявите ее как extrinsic для выполнения в MATLAB.
Неконстантный индекс в вараргин или вараргаут в цикле for-Loop
Цикл силы разворачивается, когда генератор кода не может определить значение индекса в varargin
или varargout
.
Избегайте дублирования функций в сгенерированном коде
Уменьшите вхождение повторяющихся функций в сгенерированном коде.
Выходная переменная должна быть назначена перед рекурсивным вызовом во время выполнения
Диагностируйте проблемы назначения выходных переменных для рекурсии во время выполнения.
Достигнут предел рекурсии во время компиляции
Диагностируйте проблемы с предельной ошибкой рекурсии во время компиляции.