Функция точки входа является функцией MATLAB® верхнего уровня, от которой вы генерируете код. Если ваша функция точки входа имеет входные параметры, необходимо задать свойства входных параметров сгенерировать MEX-функцию. В этом случае сгенерированная MEX-функция работает только с подписью функции точки входа, которую вы задаете во время генерации кода.
Если ваша функция точки входа поддерживает несколько подписей, можно сгенерировать одну MEX-функцию вместо того, чтобы генерировать отдельную MEX-функцию для каждой подписи. Сгенерированная MEX-функция работает с несколькими подписями, обеспеченными во время генерации кода.
При помощи функциональности мультиподписи MEX вы можете:
Сгенерируйте одну MEX-функцию, которая поддерживает несколько подписей, которые вы задаете в функции точки входа.
Уменьшайте издержки, вовлеченные в генерацию и использование отдельных MEX-функций для каждой подписи вашей функции точки входа.
Достигните подобного функции MATLAB поведения в сгенерированной MEX-функции.
Чтобы сгенерировать MEX-функцию мультиподписи, рассмотрите этот функциональный myAdd:
function y = myAdd(a,b) %#codegen y = a+b; end
myAdd это работает с тремя различными типами данных: doubleint8, и vector of doubles. Задайте эти три аргумента как: {1,2}, {int8(2), int8(3)}, и {1:10, 1:10}. Вы задаете функцию точки входа, сопровождаемую -args для каждой подписи функции точки входа.Сгенерировать код для myAdd функция, в командной строке MATLAB, запускает это codegen команда:
codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report
myAdd_mex для подписей, заданных в codegen команда.В командной строке вызовите сгенерированную MEX-функцию myAdd_mex. Убедитесь, что значения вы передаете myAdd_mex совпадайте с входными свойствами, которые вы задали в codegen команда.
myAdd_mex(3,4)
ans =
7myAdd_mex(int8(5),int8(6))
ans = int8 11
myAdd_mex(1:10,2:11)
ans =
3 5 7 9 11 13 15 17 19 21Выполнение функции MATLAB myAdd с этими входными значениями производит тот же выход. Эти тесты проверяют тот myAdd и myAdd_mex имейте то же поведение.
Во время генерации кода можно также сгенерировать одну MEX-функцию для нескольких функций точки входа, содержащих несколько подписей.
Предположим, что у вас есть две функции точки входа myAdd и myMul. Первая функция точки входа, myAdd возвращает сумму двух значений:
function y = myAdd(a,b) %#codegen y = a+b; end
Вторая функция точки входа, myMul возвращает умножение двух значений:
function y = myMul(a,b) %#codegen y = a*b; end
Вы задаете функцию точки входа, сопровождаемую -args для каждой подписи функции точки входа. Полагайте что функция myAdd поддерживает входные типы double и int8. Задайте эти аргументы как: {1,2} и {int8(1), int8(2)}. Точно так же, если функция myMul поддерживает входные типы double и int16, задайте эти аргументы как: {1,2} и {int16(1), int16(2)}. Теперь можно сгенерировать MEX-функцию от функций точки входа.
Сгенерировать код для myAdd и myMul функции, в командной строке MATLAB, запускают это codegen команда:
codegen -config:mex myAdd.m -args {1,2} -args {int8(1),int8(2)} myMul.m -args {1,2} -args {int16(1),int16(2)} -o 'myMath' -report
Этот синтаксис генерирует одну MEX-функцию myMath для всех подписей, которые вы задали в codegen команда.
Можно проверить выходные значения при помощи сгенерированной MEX-функции myMath в командной строке. Убедитесь, что значения вы передаете myMath совпадайте с входными свойствами, которые вы задали перед генерацией кода.
myMath("myAdd",3,4)ans =
7myMath("myAdd",int8(5),int8(6))ans =
int8
11myMath("myMul",3,4)ans =
12myMath("myMul",int16(5),int16(6))ans =
int16
30Выполнение функции MATLAB myAdd и myMul с этими входными значениями производит тот же выход. Эти тесты проверяют это myAdd, myMul, и сгенерированная MEX-функция myMath имейте то же поведение.
Генерация мультиподписи MEX не поддерживает:
fiaccel (Fixed-Point Designer)
-float2fixed настройка.
Определение входных параметров программно. Смотрите Задают Входные свойства Программно в файле MATLAB.