Когда вы задаете постоянный входной параметр для генерации MEX-функции, по умолчанию сгенерированная сигнатура MEX-функции включает этот аргумент. Когда вы вызываете MEX-функцию, она проверяет, что значение, которое вы предоставляете для постоянного аргумента, является значением, заданным во времени генерации кода.
Чтобы сгенерировать MEX-функцию, которая не проверяет постоянные входные значения или которая не включает постоянные входные параметры, измените параметр конфигурации проверки постоянного входа:
Если вы используете MATLAB® Coder™ приложение:
На странице Generate Code установите Build type равным MEX
.
Нажмите More Settings.
На вкладке All Settings установите Constant Inputs одно из значений в таблице.
Если вы используете codegen
, в объекте строения MEX, установите ConstantInputs
свойство одному из значений в таблице.
Constant Inputs (Приложение) | ConstantInputs (Строение) | Описание |
---|---|---|
|
| Это значение является значением по умолчанию. Когда вы вызываете MEX-функцию, она проверяет, что значение, которое вы предоставляете для постоянного входного параметра, является значением, заданным во времени генерации кода. Вы можете вызвать MEX-функцию и исходную функцию MATLAB с теми же аргументами. Поэтому можно использовать один и тот же тестовый файл для обеих функций. Проверка значений может добавить к времени выполнения MEX-функции. |
|
| Когда вы вызываете MEX-функцию, она игнорирует значение, которое вы обеспечиваете для постоянного входного параметра. Он использует значение, заданное во время генерации кода. Можно использовать тот же тестовый файл без накладных расходов на проверку значений постоянных аргументов. |
|
| Генератор кода удаляет постоянные входные параметры из сигнатуры MEX-функции. Когда вы вызываете MEX-функцию, вы не задаете значение для постоянного входного параметра. Эта опция предназначена для обратной совместимости. |
В этом примере показано, как использовать ConstantInputs
параметр для управления тем, проверяет ли MEX-функция значение постоянного входного параметра.
Напишите функцию myadd
который возвращает сумму его входов.
function c = myadd(a,b) c = a + b; end
Создайте объект строения для генерации кода MEX.
mexcfg = coder.config('mex');
Посмотрите на значение параметра конфигурации проверки постоянного входного сигнала, ConstantInputs
.
mexcfg.ConstantInputs
ans = 'CheckValues'
Имеет значение по умолчанию, CheckValues
.
Сгенерируйте MEX-функцию myadd_mex
. Задайте, что первый аргумент является двойным скаляром и что второй аргумент является константой со значением 3
.
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
Функции myadd_mex
. Вы должны предоставить входные 3
для второго аргумента.
myadd_mex(1,3)
ans = 4
Изменение ConstantInputs
чтобы MEX-функция не проверяла, чтобы входное значение совпадало со значением, заданным во время генерации кода.
mexcfg.ConstantInputs = 'IgnoreValues';
Сгенерируйте myadd_mex
.
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
Функции myadd_mex
с постоянным входным значением, отличным от 3
, для примера, 5
.
myadd_mex(1,5)
ans = 4
Значение MEX-функции игнорируется входом 5
. В нем используется значение 3
, которое является значением, заданным для постоянного аргумента b
когда вы сгенерировали myadd_mex
.
Изменение ConstantInputs
так, что сигнатура MEX-функции не включает в себя постоянный входной параметр.
mexcfg.ConstantInputs = 'Remove';
Сгенерируйте myadd_mex
.
codegen myadd -config mexcfg -args {1, coder.Constant(3)}
Code generation successful.
Функции myadd_mex
. Предоставьте значение 1
для a
. Не задайте значение для постоянного аргумента b
.
myadd_mex(1)
ans = 4