Функция точки входа является MATLAB верхнего уровня® функция, из которой вы генерируете код. Если ваша функция точки входа имеет входы, необходимо задать свойства входов, чтобы сгенерировать MEX-функцию. В этом случае сгенерированная MEX-функция работает только с сигнатурой функции точки входа, которую вы задаете во время генерации кода.
Если ваша функция точки входа поддерживает несколько сигнатур, можно сгенерировать одну MEX-функцию вместо генерации отдельной MEX-функции для каждой подписи. Сгенерированная MEX-функция работает с несколькими сигнатурами, предоставленными во время генерации кода.
Используя функции multisignature MEX, можно:
Сгенерируйте одну MEX-функцию, которая поддерживает несколько сигнатур, которые вы задаете в функции точки входа.
Уменьшите накладные расходы, связанные с генерацией и использованием отдельных MEX-функций для каждой подписи вашей функции точки входа.
Достигайте функционального поведения MATLAB в сгенерированной MEX-функции.
Чтобы сгенерировать мультисигнатурную MEX-функцию, рассмотрим эту функцию myAdd
:
function y = myAdd(a,b) %#codegen y = a+b; end
myAdd
который работает с тремя различными типами данных: double
, int8
, и vector of doubles
. Задайте три аргумента как: {1,2}
, {int8(2), int8(3)}
, и {1:10, 1:10}
. Вы задаете функцию точки входа, за которой следует -args
для каждой подписи функции точки входа.Чтобы сгенерировать код для myAdd
function, в командной строке 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 = 7
myAdd_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
functions, в командной строке 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 = 7
myMath("myAdd",int8(5),int8(6))
ans =
int8
11
myMath("myMul",3,4)
ans = 12
myMath("myMul",int16(5),int16(6))
ans =
int16
30
Выполнение функции MATLAB myAdd
и myMul
с этими входными значениями формирует тот же выход. Эти тесты проверяют, что myAdd
, myMul
, и сгенерированная MEX-функция myMath
имеют то же поведение.
Мультисигнатурная генерация MEX не поддерживает:
fiaccel
(Fixed-Point Designer)
-float2fixed строение.
Программное определение входных параметров. Смотрите Программное определение входных свойств в файле MATLAB.