Когда вы задаете постоянный входной параметр для генерации 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