このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
関数定義
MATLAB Function ブロックでの使用を目的とする MATLAB® 関数を作成する場合、特別な考慮事項があります。これには、varargin
、varargout
、再帰関数、無名関数、入れ子関数を使用する場合の特定の制約が含まれます。MATLAB の再帰関数のコードを生成するために、コード ジェネレーターはコンパイル時の再帰または実行時の再帰のいずれかを使用します。効率的な C/C++ コードを生成するために、コード ジェネレーターは、関数の特殊化と呼ばれる複数バージョンの関数を作成する場合があります。場合によっては、coder.ignoreConst
と coder.ignoreSize
を使用して、コード ジェネレーターで関数の特殊化が作成されないようにすることができます。MATLAB コードで特定の関数に対するコード生成を回避し、代わりに MATLAB エンジンを使用して呼び出しを実行できます。これを行うには、coder.extrinsic
コンストラクトを使用します。
ブロック
MATLAB Function | MATLAB コードを Simulink モデルに含める |
MATLAB System | System object をモデルに含める |
関数
coder.extrinsic | 外部として関数を宣言し MATLAB で実行する |
coder.ignoreSize | 定数サイズの式を対象とした関数の特殊化がコード ジェネレーターにより作成されるのを回避する |
coder.ignoreConst | 関数の特殊化の式における定数値の使用の防止 |
coder.mustBeConst | 値がコンパイル時の定数であることの検証 (R2023b 以降) |
coder.unroll | 各ループ反復でループ本体のコピーを作成することで、for ループを展開 |
coder.sameSizeBinaryOp | Apply element-wise binary operations without implicit expansion (R2021b 以降) |
coder.noImplicitExpansionInFunction | 生成コードの指定した関数内で暗黙的な拡張を無効化 (R2021b 以降) |
coder.read | 実行時に生成コードでデータ ファイルを読み取り (R2023a 以降) |
coder.write | 実行時に生成コードで読み取るデータ ファイルを作成 (R2023a 以降) |
トピック
- コンパイル命令 %#codegen
MATLAB 関数がコード生成用であることを示します。
- 暗黙的な拡張を有効にしたコードの生成
暗黙的な拡張を達成するためにコード ジェネレーターで生成コードに変更が加えられます。
- 生成コードでの暗黙的な拡張の最適化
生成コードでの暗黙的な拡張は既定で有効になっています。
- 可変長引数リストのコード生成
varargin
およびvarargout
のコードを生成します。 - 入力引数と出力引数を検証する arguments ブロックのコード生成
関数の入力値と出力値のクラス、サイズ、および他の特性を制約する MATLAB コードのコードを生成する。
- 再帰関数のコード生成
コード生成用に MATLAB コードで再帰関数を使用します。
- コード ジェネレーターで実行時の再帰を強制的に使用させる
コード ジェネレーターでコンパイル時の再帰ではなく実行時の再帰が使用されるように、MATLAB コードを書き換えます。
- 無名関数のコード生成
コード生成用に MATLAB コードで無名関数を使用します。
- 入れ子関数のコードの生成
コード生成用に MATLAB コードで入れ子関数を使用します。
- コード生成における関数呼び出しの解決
コード ジェネレーターは優先順位ルールを使用して関数呼び出しを解決します。
- コード生成パスでのファイル タイプの解決
コード ジェネレーターは優先順位ルールを使用してファイル タイプを解決します。
- MATLAB Function ブロックでの MATLAB エンジンを使用した関数呼び出しの実行
関数がコード生成でサポートされない場合は、その関数を "外部" 関数として宣言して MATLAB で実行します。
トラブルシューティング
for ループ内の varargin または varargout のインデックスが一定でない
コード ジェネレーターが varargin
または varargout
のインデックスの値を特定できないときに、ループ展開を強制的に実行します。
生成されたコード内での重複関数の発生を軽減。
実行時再帰の出力変数の代入のトラブルシューティング。
コンパイル時の再帰限界値エラーをトラブルシューティングします。
コード生成中に発生したサイズ不一致エラーをトラブルシューティングする。