coder.extrinsic

Объявите функцию как значение внешних параметров и выполните его в MATLAB

Описание

пример

coder.extrinsic(function) объявляет function как внешняя функция. Генератор кода не производит код для тела внешней функции и вместо этого использует MATLAB® механизм, чтобы выполнить вызов. Эта функциональность доступна только, когда движок MATLAB доступен во время выполнения. Примеры ситуаций, во время которых движок MATLAB доступен, включают выполнение MEX-функций, Simulink® симуляции или вызовы функции во время генерации кода (также известный как compile time).

Во время автономной генерации кода генератор кода пытается определить, влияет ли внешняя функция на выход функции, в которой это называется — например, путем возврата mxArrays к выходной переменной. При условии, что нет никакого изменения в выходе, доходах генератора кода с генерацией кода, но не исключает внешнюю функцию из сгенерированного кода. В противном случае генератор кода производит ошибку компиляции.

Вы не можете использовать coder.ceval на функциях, при помощи которых вы объявляете как значение внешних параметров coder.extrinsic.

coder.extrinsic проигнорирован за пределами генерации кода.

Примечание

Генератор кода автоматически обрабатывает много общих функций визуализации MATLAB, такой как plot, disp, и figure, как значение внешних параметров. Вы не должны явным образом объявлять их, когда значение внешних параметров функционирует при помощи coder.extrinsic.

coder.extrinsic(function1, ... ,functionN) объявляет function1 через functionN когда значение внешних параметров функционирует.

coder.extrinsic('-sync:on', function1, ... ,functionN) включает синхронизацию глобальных данных между выполнением MATLAB и выполнением сгенерированного кода или симуляцией Simulink до и после вызовов внешних функций function1 через functionN. Если только несколько внешних вызовов используют или изменяют глобальные данные, выключают синхронизацию до и после всех внешних вызовов функции путем установки глобального режима синхронизации на At MEX-function entry and exit. Используйте '-sync:on' опция, чтобы включить синхронизацию только для внешних вызовов, которые действительно изменяют глобальные данные.

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

Смотрите генерируют код для глобальных данных.

coder.extrinsic('-sync:off', function1, ... ,functionN) отключает синхронизацию глобальных данных между выполнением MATLAB и выполнением сгенерированного кода до и после вызовов внешних функций function1 через functionN. Если большинство внешних вызовов использует или изменяет глобальные данные, но некоторые не делают, используйте '-sync:off' опция, чтобы выключить синхронизацию для внешних вызовов, которые не изменяют глобальные данные.

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

Смотрите генерируют код для глобальных данных.

Примеры

свернуть все

Функция MATLAB patch не поддерживается для генерации кода. В этом примере показано, как можно все еще использовать функциональность patch в вашей сгенерированной MEX-функции путем объявления patch как значение внешних параметров ваша функция MATLAB.

Этот код MATLAB объявляет patch как значение внешних параметров в локальной функции create_plot. Путем объявления patch как значение внешних параметров, вы даете генератору кода команду не производить код для patch. Вместо этого отправки генератора кода patch к MATLAB для выполнения.

Генератор кода автоматически обрабатывает много общих функций визуализации MATLAB, таких как функция axis как значение внешних параметров.

function c = pythagoras(a,b,color) %#codegen
% Calculate the hypotenuse of a right triangle
% and display the triangle as a patch object. 
c = sqrt(a^2 + b^2);
create_plot(a, b, color);
end

function create_plot(a, b, color)
%Declare patch as extrinsic
coder.extrinsic('patch'); 
x = [0;a;a];
y = [0;0;b];
patch(x,y,color);
axis('equal');
end

Сгенерируйте MEX-функцию для pythagoras. Кроме того, сгенерируйте отчет генерации кода.

codegen -report pythagoras -args {1, 1, [.3 .3 .3]}

В отчете просмотрите код MATLAB для create_plot.

Отчет подсвечивает patch и axis функционируют функции, чтобы указать, что они обработаны как значение внешних параметров.

Запустите MEX-функцию.

pythagoras_mex(3, 4, [1.0 0.0 0.0]);

MATLAB отображает график прямоугольного треугольника как красный объект закрашенной фигуры.

Примечание

Вместо того, чтобы генерировать файл MEX при помощи codegen команда, вы могли также поместить функциональный pythagoras в блоке MATLAB Function в модели Simulink. Когда вы симулируете модель, блок MATLAB Function имеет подобное поведение как pythagoras_mex.

Определенные функции MATLAB для графика и сетевых алгоритмов не поддерживаются для генерации кода. В этом примере показано, как можно все еще использовать эти функции в сгенерированном коде MEX путем объявления их как значения внешних параметров.

Задайте функцию MATLAB foo это принимает входные и выходные индексы узла для ориентированного графа как входные параметры и определяет, является ли график нециклическим. Функциональный foo также строит ориентированного графа.

Функциональный foo содержит вызовы функций plot, hascycles, и isdag это не поддерживается для генерации кода. Эти три функции, как явным образом объявляют, являются значением внешних параметров при помощи coder.extrnisic создать.

function [hasCycles,isDAG] = foo(source,target)
coder.extrinsic('hascycles','isdag','plot');
assert(numel(source) == numel(target))
G = digraph(source,target);
plot(G)
hasCycles = hascycles(G);
isDAG = isdag(G);
end

Сгенерируйте код MEX для foo. Задайте входные параметры, чтобы быть неограниченными векторами, типа double.

codegen foo -args {coder.typeof(0,Inf),coder.typeof(0,Inf)}

Вызовите сгенерированную MEX-функцию foo_mex с подходящими входными параметрами:

[out1,out2] = foo_mex([1 2 4 4],[2 3 3 1])
out1 =

  logical

   0


out2 =

  logical

   1

MATLAB также отображает график:

A directed acyclic graph with four vertices and four edges.

Входные параметры

свернуть все

Имя функции MATLAB, которая объявляется как значение внешних параметров.

Пример: coder.extrinsic('patch')

Типы данных: char

Ограничения

  • Внешние вызовы функции имеют немного служебные, который может влиять на эффективность. Входные данные, который передается во внешнем вызове функции, должны быть предоставлены MATLAB, который требует создания копии данных. Если функция имеет какие-либо выходные данные, эти данные должны быть возвращены в среду MEX-функции, которая также требует копии.

  • Генератор кода не поддерживает использование coder.extrinsic вызывать функции, которые расположены в частной папке.

  • Генератор кода не поддерживает использование coder.extrinsic вызывать локальные функции.

Советы

  • Генератор кода автоматически обрабатывает много общих функций визуализации MATLAB, такой как plot, disp, и figure, как значение внешних параметров. Вы не должны явным образом объявлять их, когда значение внешних параметров функционирует при помощи coder.extrinsic.

  • Используйте coder.screener функция, чтобы обнаружить, какие функции необходимо объявить как значение внешних параметров. Эта функция запускает Инструмент Готовности Генерации кода, который экранирует код MATLAB на функции и функции, которые не поддерживаются для генерации кода.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Введенный в R2011a