Когда вы задаете постоянный входной параметр для генерации 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)}
Вызовите 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)}
Вызовите 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)}
Вызовите myadd_mex. Введите значение 1 для a. Не вводите значение для аргумента константы b.
myadd_mex(1)
ans =
4