このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
複数のエントリポイント関数のためのコード生成
エントリポイント関数は、コードを生成する最上位の 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
この場合、codegen
は myOutputFileName
という名前の MEX 関数を現在のフォルダーに生成し、生成ファイルをサブフォルダー codegen/mex/myOutputFileName
に保存します。
例: 2 つのエントリポイント関数のコードの生成
2 つのエントリポイント関数、ep1
と ep2
の MEX 関数を生成します。関数 ep1
は 1 つの入力を取り、ep2
は 2 つの入力を取ります。-o
オプションを使用して、生成される MEX 関数を sharedmex
という名前にします。
codegen -o mySharedMex ep1 -args {single(0)} ep2 -args {0,zeros(1,1024)}
codegen
は mySharedMex.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 つのエントリポイント関数の呼び出し
複数のエントリポイント関数 fun1
、fun2
などの funN
から生成された MEX 関数 myMex
があるとします。次の構文を使用して、1 つのエントリポイント関数 fun_i
を呼び出すことができます。
myMex('fun_i',param1,..,paramM)
ここでは、fun_i
用の MATLAB 関数シグネチャは fun_i(param1,..,paramM)
です。
たとえば、エントリポイント関数 ep1
と ep2
を含む MEX 関数 mySharedMex
を考えてみます。入力パラメーター u
と共に ep1
を呼び出すには、次のように入力します。
mySharedMex('ep1',u)
入力パラメーター v
および x
と共に ep2
を呼び出すには、次のように入力します。
mySharedMex('ep2',v,x)
MATLAB Coder アプリを使用した 1 つを超えるエントリポイント関数のためのコード生成
この例では、MATLAB Coder™ アプリを使用して複数のエントリポイント関数のためのコードを生成する方法を示します。
エントリポイント関数の作成
ローカルの書き込み可能なフォルダーで、以下のコードを含む MATLAB ファイル
ep1.m
を作成します。function y = ep1(u) %#codegen y = u;
同じローカルの書き込み可能なフォルダーで、以下のコードを含む 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 アプリ アイコンをクリックします。
ソース ファイルの指定
[ソース ファイルの選択] ページで、エントリポイント関数の名前
ep1
を入力または選択します。現在のフォルダーに既定の名前
ep1.prj
をもつプロジェクトが作成されます。コード生成エラーを防ぐためには、プロジェクト ファイルとすべてのエントリポイント MATLAB 関数ファイルを同じフォルダーに保存しなければなりません。エントリポイント関数のリストに
ep2
を追加するために、[エントリポイント関数の追加] をクリックします。エントリポイント関数の名前ep2
を入力または選択します。[入力の型を定義] ステップに進むには、[次へ] をクリックします。アプリによって関数のコーディングの問題とコード生成の準備状態が解析されます。問題が検出された場合は、[コード生成の準備状態の確認] ページが開くので、ここで問題を確認して修正できます。この例では問題は検出されないので、[入力の型を定義] ページが表示されます。
入力の型の定義
C では静的なデータ型が使用されるため、MATLAB Coder は MATLAB ファイル内のすべての変数のプロパティをコンパイル時に判別しなければなりません。すべてのエントリポイント関数の入力のプロパティを指定しなければなりません。MATLAB Coder は、エントリポイント関数の入力のプロパティから MATLAB ファイル内のすべての変数のプロパティを推定できます。
MATLAB Coder が自動的に型を定義するために使用するテスト ファイルを指定します。
テスト ファイル
ep_test.m
を入力または選択します。[入力の型の自動定義] をクリックします。
テスト ファイル
ep_test.m
は入力型の例と共にエントリポイント関数ep1
およびep2
を呼び出します。MATLAB Coder はep1
の入力u
がsingle(1x1)
であることを推定します。ep2
については、u
およびv
がdouble(1x1)
であることを推定します。[実行時の問題の確認] ステップに進むには、[次へ] をクリックします。
実行時の問題の確認
[実行時の問題の確認] ステップでは、エントリポイント関数からの MEX ファイルの生成、MEX 関数の実行および問題の報告が行われます。このステップはオプションです。ただし、このステップを実行することをお勧めします。生成された C コードでの診断が難しいランタイム エラーを検出して修正することができます。
[実行時の問題の確認] ダイアログ ボックスを開くために [問題の確認] 矢印 をクリックします。
入力の型の定義に使用したテスト ファイル
ep_test
が、アプリによって [テスト ファイル] フィールドに入力されます。[問題の確認] をクリックします。
ep1
とep2
用のep1_mex
という名前の MEX 関数が生成されます。ep1
およびep2
の呼び出しを MEX 関数の呼び出しに置き換えてテスト ファイルep_test
が実行されます。MEX 関数の生成または実行中に問題が検出された場合は、警告およびエラー メッセージが表示されます。問題のあるコードに移動し、問題を修正するには、これらのメッセージをクリックします。この例ではアプリは問題を検出しません。[コード生成] ステップに進むには、[次へ] をクリックします。
MEX 関数の生成
[生成] ダイアログ ボックスを開くために [生成] 矢印 をクリックします。
[ビルド タイプ] を
[MEX]
に設定します。[出力ファイル名] が
ep1_mex
であることを確認します。既定では、アルファベット順で最初のエントリポイント関数の名前が使用されます。[生成] をクリックします。
MATLAB Coder によってプロジェクトがビルドされます。MEX 関数
ep1_mex
が現在のフォルダーに作成されます。また、MATLAB Coder は、codegen/mex/ep1_mex
というサブフォルダーに他のサポート ファイルを生成します。MATLAB Coder は、MATLAB 関数の名前を生成するファイルのルート名として使用します。命名規則で説明されているように、MEX ファイル用にプラットフォーム固有の拡張子が作成されます。これで、MATLAB で MEX 関数をテストできます。MEX 関数からの 1 つのエントリポイント関数の呼び出しを参照してください。
ep1
とep2
のスタティック ライブラリを生成する場合、MATLAB Coder はプロジェクトをビルドし、C ライブラリep1
とサポート ファイルを既定のフォルダーcodegen/lib/ep1
に生成します。