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

Функция точки входа является 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-функции

Предположим, что у вас есть 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 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 панель инструментов, в разделе 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.

Определите входные типы

Поскольку 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). Для ep2, u и v являются double(1x1).

  3. Чтобы перейти к 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 и ep2MATLAB Coder строит проект и генерирует библиотеку на C, ep1и вспомогательные файлы в папке по умолчанию, codegen/lib/ep1.

См. также

|

Похожие темы