Функцией точки входа является MATLAB верхнего уровня® функция, от которой вы генерируете код. Для многих приложений вы, возможно, только должны сгенерировать код для одной функции точки входа. Можно также сгенерировать код C/C++ от нескольких функций точки входа одновременно. При помощи нескольких функций точки входа вы можете:
Сгенерируйте многофункциональные библиотеки C/C++, которые содержат большие уровни функциональности, чем если бы необходимо было сгенерировать независимые библиотеки для каждой функции точки входа.
Сгенерируйте код, который совместно использует код более эффективно, когда несколько функций точки входа используют те же подфункции.
Сгенерируйте библиотечные функции, которые могут передать общую память использования, например, когда они используют те же глобальные переменные.
Как лучшая практика, сгенерируйте MEX-функцию, чтобы подтвердить взаимодействия точки входа в MATLAB прежде, чем сгенерировать библиотеку C/C++.
Чтобы сгенерировать код больше чем для одной функции точки входа, используйте синтаксис от codegen
страница с описанием. По умолчанию, для генерации кода MEX, codegen
:
Генерирует MEX-функцию в текущей папке. Только одна MEX-функция сгенерирована, когда вы задаете несколько функций точки входа. Чтобы вызвать одну функцию точки входа от сгенерированной MEX-функции, смотрите, Вызывают Одну Функцию Точки входа от MEX-функции.
Называет MEX-функцию name
MEX
имя первой функции точки входа от алфавитного порядка.Имя
Хранит сгенерированные файлы в подпапке, 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.
Определите входные типы
Поскольку 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
.