Функция точки входа является функцией 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, под Генерацией кода, кликают по значку приложения MATLAB CODER.
Задайте исходные файлы
На странице Select Source Files введите или выберите имя функции точки входа ep1
.
Приложение создает проект с именем по умолчанию ep1.prj
в текущей папке. Чтобы избежать ошибок генерации кода, необходимо хранить файл проекта и все файлы функции MATLAB точки входа в той же папке.
Чтобы добавить ep2
к списку функций точки входа, нажмите Add Entry-Point Function. Введите или выберите имя функции точки входа ep2
.
Чтобы перейти к Задавать Входному шагу Типов, нажать Далее. Приложение анализирует функции для кодирования готовность генерации кода и проблемы. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types.
Задайте входные типы
Поскольку C использует статический контроль типов, во время компиляции, MATLAB CODER должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB CODER может вывести свойства всех переменных в файлах MATLAB.
Задайте тестовый файл, который MATLAB CODER может использовать, чтобы автоматически задать типы:
Введите или выберите тестовый файл ep_test.m
m.
Нажмите Autodefine Input Types.
Тестовый файл, ep_test.m
, вызывает функции точки входа ep1
и ep2
с входными типами в качестве примера. MATLAB CODER выводит, что для ep1
, входной параметр u
является single(1x1)
. Для ep2
u
и v
является double(1x1)
.
Чтобы перейти к Проверке на шаг Проблем Во время выполнения, нажать Далее.
Проверьте на проблемы во время выполнения
Проверка на шаг Проблем Во время выполнения генерирует файл MEX от ваших функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является дополнительным. Однако это - лучшая практика выполнить этот шаг. Можно обнаружить и зафиксировать ошибки времени выполнения, которые более трудно диагностировать в сгенерированном коде C.
Чтобы открыть диалоговое окно Check for Run-Time Issues, кликните по Проверке на стрелку Проблем.
Приложение заполняет поле тестового файла с ep_test
, тестовый файл, что вы раньше задавали входные типы.
Нажмите Check for Issues.
Приложение генерирует MEX-функцию под названием ep1_mex
для ep1
и ep2
. Это запускает тестовый файл ep_test
, заменяющий вызовы ep1
и ep2
с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Чтобы перейти к проблематичному коду и устранить проблему, кликните по этим сообщениям. В этом примере приложение не обнаруживает проблемы.
Чтобы перейти к Сгенерировать шагу Кода, нажать Далее.
Сгенерируйте MEX-функцию
Чтобы открыть диалоговое окно Generate, нажмите стрелку Generate.
Установите тип Сборки на MEX
.
Проверьте, что именем Выходного файла является 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
.