Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

複数のエントリポイント関数のためのコード生成

エントリポイント関数は、コードを生成する最上位の MATLAB® 関数です。多くのアプリケーションでは、単一のエントリポイント関数のコードのみ生成する必要があります。また、複数のエントリポイント関数から C/C++ コードを同時に生成することもできます。複数のエントリポイント関数を使用すると、以下を実行できます。

  • エントリポイント関数ごとに独立したライブラリを生成した場合よりも高いレベルの機能を含む多機能 C/C++ ライブラリを生成する。

  • 複数のエントリポイント関数が同じサブ関数に依存するときにコードをより効率的に共有するコードを生成する。

  • 同じグローバル変数を使用している場合など、共有メモリを使用して通信できるライブラリ関数を生成する。

C/C++ ライブラリを生成する前に、MATLAB でエントリポイントの動作を検証する MEX 関数を生成することをお勧めします。

複数のエントリポイント関数のためのコードの生成

複数のエントリポイント関数のコードを生成するには、codegen リファレンス ページの構文を使用します。既定では、MEX コードの生成の場合、codegen は次を実行します。

  • 現在のフォルダーに MEX 関数を生成します。複数のエントリポイント関数を指定するときに、1 つの MEX 関数のみ生成されます。生成された MEX 関数から単一のエントリポイント関数を呼び出すには、MEX 関数からの 1 つのエントリポイント関数の呼び出しを参照してください。

  • MEX 関数に name_mex という名前をつけます。name は、アルファベット順の最初のエントリポイント関数の名前です。

  • 生成されたファイルをサブフォルダー codegen/mex/subfolder に保存します。subfolder は、左から右の順序 (codegen コマンドの後に入力されているため) の最初のエントリポイント関数の名前です。

-o オプションを使用して出力ファイル名とサブフォルダー名を指定できます。

codegen -o myOutputFileName fun1 fun2

この場合、codegenmyOutputFileName という名前の MEX 関数を現在のフォルダーに生成し、生成ファイルをサブフォルダー codegen/mex/myOutputFileName に保存します。

例: 2 つのエントリポイント関数のコードの生成

2 つのエントリポイント関数、ep1ep2 の MEX 関数を生成します。関数 ep1 は 1 つの入力を取り、ep2 は 2 つの入力を取ります。-o オプションを使用して、生成される MEX 関数を sharedmex という名前にします。

codegen -o mySharedMex ep1 -args {single(0)} ep2 -args {0,zeros(1,1024)}

codegenmySharedMex.mex という名前の 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 フォルダーに生成されます。

1 つのエントリポイント関数の出力の型を別の関数の入力の型として使用するには、入力としてのエントリポイント関数出力の受け渡しを参照してください。コード生成レポートでエントリポイント関数を確認する方法については、コード生成レポートを参照してください。

MEX 関数からの 1 つのエントリポイント関数の呼び出し

複数のエントリポイント関数 fun1fun2 などの funN から生成された MEX 関数 myMex があるとします。次の構文を使用して、1 つのエントリポイント関数 fun_i を呼び出すことができます。

myMex('fun_i',param1,..,paramM)

ここでは、fun_i 用の MATLAB 関数シグネチャは fun_i(param1,..,paramM) です。

たとえば、エントリポイント関数 ep1ep2 を含む MEX 関数 mySharedMex を考えてみます。入力パラメーター u と共に ep1 を呼び出すには、次のように入力します。

mySharedMex('ep1',u)

入力パラメーター v および x と共に ep2 を呼び出すには、次のように入力します。

mySharedMex('ep2',v,x)

MATLAB Coder アプリを使用した 1 つを超えるエントリポイント関数のためのコード生成

この例では、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 が含まれているフォルダーに、サンプル入力と共に ep1 および ep2 を呼び出す MATLAB ファイル ep_test.m を作成します。

function [y, y1] = ep_test
y = ep1(single(2));
y1 = ep2(double(3), double(4));

MATLAB Coder アプリを開く

MATLAB ツールストリップの [アプリ] タブの [コード生成] の下で、MATLAB Coder アプリ アイコンをクリックします。

ソース ファイルの指定

  1. [ソース ファイルの選択] ページで、エントリポイント関数の名前 ep1 を入力または選択します。

    現在のフォルダーに既定の名前 ep1.prj をもつプロジェクトが作成されます。コード生成エラーを防ぐためには、プロジェクト ファイルとすべてのエントリポイント MATLAB 関数ファイルを同じフォルダーに保存しなければなりません。

  2. エントリポイント関数のリストに ep2 を追加するために、[エントリポイント関数の追加] をクリックします。エントリポイント関数の名前 ep2 を入力または選択します。

  3. [入力の型を定義] ステップに進むには、[次へ] をクリックします。アプリによって関数のコーディングの問題とコード生成の準備状態が解析されます。問題が検出された場合は、[コード生成の準備状態の確認] ページが開くので、ここで問題を確認して修正できます。この例では問題は検出されないので、[入力の型を定義] ページが表示されます。

入力の型の定義

C では静的なデータ型が使用されるため、MATLAB Coder は MATLAB ファイル内のすべての変数のプロパティをコンパイル時に判別しなければなりません。すべてのエントリポイント関数の入力のプロパティを指定しなければなりません。MATLAB Coder は、エントリポイント関数の入力のプロパティから MATLAB ファイル内のすべての変数のプロパティを推定できます。

MATLAB Coder が自動的に型を定義するために使用するテスト ファイルを指定します。

  1. テスト ファイル ep_test.m を入力または選択します。

  2. [入力の型の自動定義] をクリックします。

    テスト ファイル ep_test.m は入力型の例と共にエントリポイント関数 ep1 および ep2 を呼び出します。MATLAB Coderep1 の入力 usingle(1x1) であることを推定します。ep2 については、u および vdouble(1x1) であることを推定します。

  3. [実行時の問題の確認] ステップに進むには、[次へ] をクリックします。

実行時の問題の確認

[実行時の問題の確認] ステップでは、エントリポイント関数からの MEX ファイルの生成、MEX 関数の実行および問題の報告が行われます。このステップはオプションです。ただし、このステップを実行することをお勧めします。生成された C コードでの診断が難しいランタイム エラーを検出して修正することができます。

  1. [実行時の問題の確認] ダイアログ ボックスを開くために [問題の確認] 矢印 をクリックします。

    入力の型の定義に使用したテスト ファイル ep_test が、アプリによって [テスト ファイル] フィールドに入力されます。

  2. [問題の確認] をクリックします。

    ep1ep2 用の ep1_mex という名前の MEX 関数が生成されます。ep1 および ep2 の呼び出しを MEX 関数の呼び出しに置き換えてテスト ファイル ep_test が実行されます。MEX 関数の生成または実行中に問題が検出された場合は、警告およびエラー メッセージが表示されます。問題のあるコードに移動し、問題を修正するには、これらのメッセージをクリックします。この例ではアプリは問題を検出しません。

  3. [コード生成] ステップに進むには、[次へ] をクリックします。

MEX 関数の生成

  1. [生成] ダイアログ ボックスを開くために [生成] 矢印 をクリックします。

  2. [ビルド タイプ][MEX] に設定します。

  3. [出力ファイル名]ep1_mex であることを確認します。既定では、アルファベット順で最初のエントリポイント関数の名前が使用されます。

  4. [生成] をクリックします。

    MATLAB Coder によってプロジェクトがビルドされます。MEX 関数 ep1_mex が現在のフォルダーに作成されます。また、MATLAB Coder は、codegen/mex/ep1_mex というサブフォルダーに他のサポート ファイルを生成します。MATLAB Coder は、MATLAB 関数の名前を生成するファイルのルート名として使用します。命名規則で説明されているように、MEX ファイル用にプラットフォーム固有の拡張子が作成されます。

    これで、MATLAB で MEX 関数をテストできます。MEX 関数からの 1 つのエントリポイント関数の呼び出しを参照してください。

    ep1ep2 のスタティック ライブラリを生成する場合、MATLAB Coder はプロジェクトをビルドし、C ライブラリ ep1 とサポート ファイルを既定のフォルダー codegen/lib/ep1 に生成します。

参考

|

関連するトピック