Функция точки входа является 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 панель инструментов, в разделе 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)
.
Чтобы перейти к 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
.