最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

coder.extrinsic

説明

coder.extrinsic(function)function を外部関数として宣言します。コード ジェネレーターは外部関数の本体のコードを生成せず、代わりに MATLAB® エンジンを使用して呼び出しを実行します。この機能は、MEX 関数、Simulink® シミュレーション、またはコンパイルでの呼び出し中に MATLAB エンジンが使用可能な場合にのみ使用できます。

スタンドアロン コードの生成中に、コード ジェネレーターは外部関数が呼び出し元の関数の出力に影響を与えるかどうか判断しようとします。たとえば、出力変数に mxArrays を返すことによって、これを実行します。出力に変化がない場合、コード ジェネレーターはコード生成を進めますが、生成コードから外部関数を除外します。影響する場合、コンパイル エラーが発生します。

coder.extrinsic を使用して外部関数として宣言した関数では、coder.ceval を使用することはできません。

コード生成の範囲外では、関数 coder.extrinsic は無視されます。

coder.extrinsic(function1, ... ,functionN)functionN を介して function1 を外部関数として宣言します。

coder('-sync:on', function1, ... ,functionN) は、functionN を介した外部関数 function1 の呼び出しの前後で、MATLAB 関数と MEX 関数との間のグローバル データの同期を有効にします。少数の外部呼び出しのみがグローバル データを使用または変更する場合、グローバル同期モードを At MEX-function entry and exit に設定してすべての外部関数呼び出しの前後で同期を無効にします。グローバル データを修正する外部呼び出しに対してのみ、'-sync:on' オプションを使用して同期を有効にします。

定数のグローバル データに対しては、外部関数の呼び出し後に MATLAB 関数と MEX 関数との整合性の検証を有効にします。

グローバル データのためのコード生成を参照してください。

coder('-sync:off', function1, ... ,functionN) は、functionN を介した外部関数 function1 の呼び出しの前後で、MATLAB 関数と MEX 関数との間のグローバル データの同期を無効にします。少数の外部呼び出しを除き、ほとんどの外部呼び出しでグローバル データを使用または修正する場合、グローバル データを修正しない外部呼び出しに対しては、'-sync:off' オプションを使用して同期を無効にします。

定数のグローバル データに対しては、外部関数の呼び出し後に MATLAB 関数と MEX 関数との整合性の検証を無効にします。

グローバル データのためのコード生成を参照してください。

すべて折りたたむ

MATLAB 関数 patch はコード生成でサポートされていません。この例は、patch を外部 MATLAB 関数として宣言することにより、生成された MEX 関数で patch の機能を引き続き使用する方法を説明します。

この MATLAB コードは patch をローカル関数 create_plot の外部関数として宣言します。patch を外部関数として宣言することにより、patch のコード生成を行わないようコード ジェネレーターに指示します。代わりに、コード ジェネレーターは patch を実行のために MATLAB に送ります。

コード ジェネレーターでは、関数 axis など、多くの一般的な MATLAB 可視化関数が外部関数として自動的に処理されます。

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

pythagoras の MEX 関数を生成します。また、コード生成レポートを生成します。

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

レポートで、create_plot の MATLAB コードを表示します。

レポートでは、関数 patch と関数 axis が強調表示され、これらが外部関数として処理されることを示します。

MEX 関数を実行します。

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

MATLAB に、直角三角形のプロットが赤い patch オブジェクトとして表示されます。

入力引数

すべて折りたたむ

外部関数として宣言される MATLAB 関数の名前。

例: coder.extrinsic('patch')

データ型: char

制限

  • 外部関数呼び出しには、パフォーマンスに影響する可能性のある何らかのオーバーヘッドがあります。外部関数呼び出しで渡される入力データは MATLAB に指定しなければなりません。これにはデータのコピー作成が必要になります。関数に出力データが含まれている場合、このデータは MEX 関数環境に再転送しなければなりません。これにもコピーが必要になります。

  • コード ジェネレーターは、coder.extrinsic を使用したプライベート フォルダー内の関数の呼び出しをサポートしていません。

  • コード ジェネレーターは、coder.extrinsic を使用したローカル関数の呼び出しをサポートしていません。

ヒント

  • コード ジェネレーターでは、plotdispfigure など、多くの MATLAB 可視化関数が外部関数として自動的に処理されます。coder.extrinsic を使用してそれらを外部関数として明示的に宣言する必要はありません。

  • 外部関数として宣言しなければならない関数を検出するには、関数 coder.screener を使用します。この関数は、MATLAB コード内にコード生成でサポートされない機能や関数がないかどうかを調べるコード生成の準備状態ツールを実行します。

R2011a で導入