Сгенерируйте код для нескольких функций точки входа

Функция точки входа является функцией MATLAB® верхнего уровня, от которой вы генерируете код. Для многих приложений вы, возможно, только должны сгенерировать код для одной функции точки входа. Можно также сгенерировать код C/C++ от нескольких функций точки входа одновременно. При помощи нескольких функций точки входа вы можете:

  • Сгенерируйте многофункциональные библиотеки C/C++, которые содержат большие уровни функциональности, чем если бы необходимо было сгенерировать независимые библиотеки для каждой функции точки входа.

  • Сгенерируйте код, который совместно использует код более эффективно, когда несколько функций точки входа используют те же подфункции.

  • Сгенерируйте библиотечные функции, которые могут передать общую память использования, например, когда они используют те же глобальные переменные.

Как лучшая практика, сгенерируйте MEX-функцию, чтобы подтвердить взаимодействия точки входа в MATLAB прежде, чем сгенерировать библиотеку C/C++.

Генерация кода для нескольких функций точки входа

Чтобы сгенерировать код больше чем для одной функции точки входа, используйте синтаксис от codegen страница с описанием. По умолчанию, для генерации кода MEX, codegen:

  • Генерирует MEX-функцию в текущей папке. Только одна MEX-функция сгенерирована, когда вы задаете несколько функций точки входа. Чтобы вызвать одну функцию точки входа от сгенерированной MEX-функции, смотрите, Вызывают Одну Функцию Точки входа от MEX-функции.

  • Называет MEX-функцию nameMEXИмя имя первой функции точки входа от алфавитного порядка.

  • Хранит сгенерированные файлы в подпапке, 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-функции

Предположим, что у вас есть MEX-функция myMex сгенерированный от нескольких функций точки входа, fun1fun2 , …, 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 Coder™.

Создайте функции точки входа

  1. В локальной перезаписываемой папке создайте файл MATLAB, ep1.m, это содержит:

    function y = ep1(u) %#codegen
    y = u;

  2. В той же локальной перезаписываемой папке создайте файл 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.

Задайте исходные файлы

  1. На странице Select Source Files введите или выберите имя функции точки входа ep1.

    Приложение создает проект с именем по умолчанию ep1.prj в текущей папке. Чтобы избежать ошибок генерации кода, необходимо хранить файл проекта и все файлы функции MATLAB точки входа в той же папке.

  2. Добавить ep2 к списку функций точки входа нажмите Add Entry-Point Function. Введите или выберите имя функции точки входа ep2.

  3. Чтобы перейти к шагу Define Input Types, нажмите Next. Приложение анализирует функции для кодирования готовность генерации кода и проблемы. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types.

Входные Define типы

Поскольку C использует статический контроль типов, во время компиляции, MATLAB Coder должен определить свойства всех переменных в файлах MATLAB. Необходимо задать свойства всех входных параметров функции точки входа. Из свойств входных параметров функции точки входа MATLAB Coder может вывести свойства всех переменных в файлах MATLAB.

Задайте тестовый файл, который MATLAB Coder может использовать, чтобы автоматически задать типы:

  1. Введите или выберите тестовый файл ep_test.m.

  2. Нажмите Autodefine Input Types.

    Тестовый файл, ep_test.m, вызывает функции точки входа ep1 и ep2 с примером вводит типы. MATLAB Coder выводит это для ep1, вход u single(1x1)для ep2U и v double(1x1).

  3. Чтобы перейти к шагу the Check for Run-Time Issues, нажмите Next.

Проверяйте на проблемы во время выполнения

Шаг Check for Run-Time Issues генерирует файл MEX от ваших функций точки входа, запускает MEX-функцию и сообщает о проблемах. Этот шаг является дополнительным. Однако это - лучшая практика выполнить этот шаг. Можно обнаружить и зафиксировать ошибки времени выполнения, которые более трудно диагностировать в сгенерированном коде C.

  1. Чтобы открыть диалоговое окно Check for Run-Time Issues, кликните по стреле Check for Issues.

    Приложение заполняет поле тестового файла с ep_test, тестовый файл, что вы раньше задавали входные типы.

  2. Нажмите Check for Issues.

    Приложение генерирует названную MEX-функцию ep1_mex для ep1 и ep2. Это запускает тестовый файл ep_test заменяя вызовы ep1 и ep2 с вызовами MEX-функции. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Чтобы перейти к проблематичному коду и устранить проблему, кликните по этим сообщениям. В этом примере приложение не обнаруживает проблемы.

  3. Чтобы перейти к шагу Generate Code, нажмите Next.

Сгенерируйте MEX-функцию

  1. Чтобы открыть диалоговое окно Generate, кликните по стреле Generate.

  2. Установите Build type на MEX.

  3. Проверьте, что Output file name является ep1_mex. По умолчанию приложение использует имя в алфавитном порядке первой функции точки входа.

  4. Нажмите 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.

Смотрите также

|

Похожие темы