Функция точки входа является функцией MATLAB® верхнего уровня, от которой вы генерируете код. Для многих приложений вы, возможно, только должны сгенерировать код для одной функции точки входа. Можно также сгенерировать код C/C++ от нескольких функций точки входа одновременно. При помощи нескольких функций точки входа вы можете:
Сгенерируйте многофункциональные библиотеки C/C++, которые содержат большие уровни функциональности, чем если бы необходимо было сгенерировать независимые библиотеки для каждой функции точки входа.
Сгенерируйте код, который совместно использует код более эффективно, когда несколько функций точки входа полагаются на те же подфункции.
Сгенерируйте библиотечные функции, которые могут передать общую память использования, например, когда они используют те же глобальные переменные.
Как лучшая практика, сгенерируйте MEX-функцию, чтобы подтвердить взаимодействия точки входа в MATLAB прежде, чем сгенерировать библиотеку C/C++.
Чтобы сгенерировать код больше чем для одной функции точки входа, используйте синтаксис со страницы с описанием codegen
. По умолчанию, для генерации кода MEX, codegen
:
Генерирует MEX-функцию в текущей папке. Только одна MEX-функция сгенерирована, когда вы задаете несколько функций точки входа. Чтобы вызвать одну функцию точки входа от сгенерированной MEX-функции, смотрите, Вызывают Одну Функцию Точки входа от MEX-функции.
Называет MEX-функцию
. name_mex
является именем первой функции точки входа от алфавитного порядка.name
Хранит сгенерированные файлы в подпапке
. codegen/mex/subfolder
subfolder
является именем первой функции точки входа от слева направо порядок (когда они вводятся после команды codegen
).
Можно задать имя выходного файла и подымя папки с помощью опции -o
:
codegen -o myOutputFileName fun1 fun2
В этом случае codegen
генерирует MEX-функцию под названием myOutputFileName
в текущей папке и хранит сгенерированные файлы в подпапке codegen/mex/myOutputFileName
.
Сгенерируйте MEX-функцию для двух функций точки входа, ep1
и ep2
. Функциональный ep1
берет вход того, и ep2
берет два входных параметров. Используя опцию -o
, назовите сгенерированную MEX-функцию sharedmex
:
codegen -o mySharedMex ep1 -args {single(0)} ep2 -args {0,zeros(1,1024)}
codegen
генерирует MEX-функцию под названием mySharedMex.mex
в текущей папке и хранит сгенерированные файлы в подпапке codegen/mex/mySharedMex
.
Чтобы сгенерировать и скомпилировать автономный код библиотеки, используйте опцию -config:lib
.
codegen -config:lib -o mySharedLib ep1 -args single(0) ep2 -args {0,zeros(1,1024)}
Команда codegen
генерирует код библиотеки C/C++ в папке codegen/lib/mySharedLib
.
Чтобы использовать выходной тип от одной функции точки входа как входной тип другому, смотрите Передачу Функция Точки входа Вывод как Вход. Для получения информации о просмотре функций точки входа в отчете генерации кода см. Отчеты Генерации кода.
Предположим, что у вас есть MEX-функция myMex
, сгенерированный от нескольких функций точки входа, fun1
, fun2
, …, funN
. Можно вызвать одну функцию точки входа, fun_i
, при помощи этого синтаксиса:
myMex('fun_i',param1,..,paramM)
Здесь подписью функции MATLAB для fun_i
является fun_i(param1,..,paramM)
.
Например, рассмотрите MEX-функцию, mySharedMex
, который имеет функции точки входа ep1
и ep2
. Вызывать ep1
с входным параметром u
, введите:
mySharedMex('ep1',u)
Вызывать ep2
с входными параметрами v
и x
, введите:
mySharedMex('ep2',v,x)
Этот пример показывает, как сгенерировать код для нескольких функций точки входа с помощью приложения MATLAB Coder™.
Создайте функции точки входа
В локальной перезаписываемой папке создайте файл MATLAB, ep1.m
, который содержит:
function y = ep1(u) %#codegen y = u;
В той же локальной перезаписываемой папке создайте файл MATLAB, ep2.m
, который содержит:
function y = ep2(u, v) %#codegen y = u + v;
Создайте тестовый файл
В папке, которая содержит ep1.m
и ep2.m
, создайте файл MATLAB, ep_test.m
, который вызывает ep1
и ep2
с входными параметрами в качестве примера.
function [y, y1] = ep_test
y = ep1(single(2));
y1 = ep2(double(3), double(4));
Откройте приложение MATLAB Coder
На вкладке Apps панели инструментов MATLAB, под Code Generation, кликают по значку приложения MATLAB Coder.
Задайте исходные файлы
На странице Select Source Files введите или выберите имя функции точки входа ep1
.
Приложение создает проект с именем по умолчанию ep1.prj
в текущей папке. Чтобы избежать ошибок генерации кода, необходимо хранить файл проекта и все файлы функции MATLAB точки входа в той же папке.
Чтобы добавить ep2
в список функций точки входа, нажмите Add Entry-Point Function. Введите или выберите имя функции точки входа ep2
.
Чтобы перейти к шагу Define Input Types, нажмите Next. Приложение анализирует функции для кодирования готовность генерации кода и проблемы. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types.
Входные Define типы
Поскольку C использует статический контроль типов, во время компиляции, MATLAB Coder должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB Coder может вывести свойства всех переменных в файлах MATLAB.
Задайте тестовый файл, который MATLAB Coder может использовать, чтобы автоматически задать типы:
Введите или выберите тестовый файл ep_test.m
.
Нажмите Autodefine Input Types.
Тестовый файл, ep_test.m
, вызывает функции точки входа ep1
и ep2
с входными типами в качестве примера. MATLAB Coder выводит, что для ep1
, входом u
является single(1x1)
. Для ep2
u
и v
является double(1x1)
.
Чтобы перейти к шагу the Check for Run-Time Issues, нажмите Next.
Проверяйте на проблемы во время выполнения
Шаг Check for Run-Time Issues генерирует файл MEX от ваших функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является дополнительным. Однако это - лучшая практика выполнить этот шаг. Можно обнаружить и зафиксировать ошибки времени выполнения, которые более трудно диагностировать в сгенерированном коде C.
Чтобы открыть диалоговое окно Check for Run-Time Issues, кликните по стрелке Check for Issues.
Приложение заполняет поле тестового файла с ep_test
, тестовый файл, что вы раньше задавали входные типы.
Нажмите Check for Issues.
Приложение генерирует MEX-функцию под названием ep1_mex
для ep1
и ep2
. Это запускает тестовый файл ep_test
, заменяющий вызовы ep1
и ep2
с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Чтобы перейти к проблематичному коду и устранить проблему, кликните по этим сообщениям. В этом примере приложение не обнаруживает проблемы.
Чтобы перейти к шагу Generate Code, нажмите Next.
Сгенерируйте MEX-функцию
Чтобы открыть диалоговое окно Generate, кликните по стрелке Generate.
Установите Build type на MEX
.
Проверьте, что Output file name является ep1_mex
. По умолчанию приложение использует имя в алфавитном порядке первой функции точки входа.
Нажмите Generate.
MATLAB Coder разрабатывает проект. Это генерирует MEX-функцию, ep1_mex
, в текущей папке. MATLAB Coder также генерирует другие вспомогательные файлы в подпапке под названием codegen/mex/ep1_mex
. MATLAB Coder использует имя функции MATLAB как корневое имя для сгенерированных файлов. Это создает специфичное для платформы расширение для файла MEX, как описано в Соглашениях о присвоении имен.
Можно теперь протестировать MEX-функцию в MATLAB. Смотрите Вызывают Одну Функцию Точки входа от MEX-функции.
Если вы генерируете статическую библиотеку для ep1
и ep2
, MATLAB Coder разрабатывает проект и генерирует библиотеку C, ep1
и вспомогательные файлы в папке по умолчанию, codegen/lib/ep1
.