コード生成用の MATLAB コードの準備
C/C++ コードを生成するために、コード ジェネレーターは、動的に型指定される MATLAB® コードを静的に型指定される C/C++ コードに変換します。動的に型指定される言語では、特定の変数のクラス、サイズ、および実数/複素数が実行時に変更される可能性があります。対照的に、静的に型指定される言語では、コンパイル時に変数の型を決定する必要があります。
コードを生成する前に、コード生成の対象とする関数を特定します。この関数は、エントリポイント関数または基本関数と呼ばれます。コード生成用にコードを準備するには、次のようにします。
コード生成用に変数を初期化します。
コードでサポートされない関数および言語機能をスクリーニングします。
コード生成用の変数の初期化
生成コードは静的に型指定されるため、使用前にコード内のすべての変数を初期化して、コード ジェネレーターが生成コードで変数を特定して適切に割り当てることができるようにします。これらの問題の一部を特定するには、コードに次の行を含めます。
%#codegen
元のコード | 問題 | 変更されたコード |
---|---|---|
y = zeros(1,10); y(3) = 1 + 2i; | y は double として定義されていますが、double 型の複素数値が代入されます。 | y = complex(zeros(1,10)); y(3) = 1 + 2i; |
for i = 1:N y(i,i) = i; end | 配列 y は定義されずに動的に拡張されます。 | y = zeros(N,N); for i = 1:N y(i,i) = i; end |
特定のデータ型に関するコード生成用のデータ定義の詳細については、コード生成のためのデータの定義に関する考慮事項およびC/C++ コード生成のための変数定義のベスト プラクティスを参照してください。
コードでのサポートされない関数および言語機能のスクリーニング
コード ジェネレーターではほとんどの言語機能と関数がサポートされています。C/C++ コードの生成でサポートされている関数およびオブジェクトを参照してください。コードにサポートされない関数および言語機能があるかを確認するには、次のようにします。
[アプリ] タブから MATLAB Coder™ アプリを起動します。あるいは、コマンド ラインで以下を入力します。
>> coder
アプリにエントリポイント関数名を入力します。この手順ではサブ関数を追加しないでください。コード ジェネレーターによって必要なサブ関数が自動的に含められます。
コード内のサポートされていない関数または言語機能を確認するには、[次へ] をクリックしてコード生成の準備状態ツールのレポートを開きます。
あるいは、エントリポイント関数に対して関数 coder.screener
を呼び出します。コマンド ラインに次のように入力します。
coder.screener('filename');
この関数はコードを解析し、サポートされない MATLAB 関数および一部のサポートされない言語機能を強調表示します。coder.screener
を参照してください。
コードにサポートされない関数が含まれている場合は、次の回避方法を検討してください。
コード生成をサポートする代替の関数と System object があるかを確認します。
サポートされていない関数のカスタム コードを記述します。
サポートされていない関数を置き換えるカスタム C 関数を呼び出すには、
coder.ceval
を使用します。サポートされていない関数を呼び出すには、
coder.extrinsic
を使用します。
これらの回避方法の詳細については、エラーの解決: コード生成でサポートされていない関数を参照してください。
ヒント
コマンド ラインでの詳細なコード生成オプションの設定
関数 codegen
を使用して構成オブジェクト coder.config
を指定します。ビルドのタイプに応じて、coder.CodeConfig
、coder.EmbeddedCodeConfig
、および coder.MexCodeConfig
も使用できます。
特定の関数のコード生成に関する考慮事項を調べる方法
コード生成でサポートされている関数のリファレンス ページに "拡張機能" というタイトルのセクションが含まれています。このセクションには、これらの関数のコードを生成する際の特別な考慮事項がリストされています。例については、interp2
の "拡張機能" を参照してください。
coder.extrinsic
の呼び出し
coder.extrinsic
の呼び出しにより、関数が外部関数として宣言されます。コード ジェネレーターは外部関数の本体のコードを生成せず、代わりに MATLAB エンジンを使用して呼び出しを実行します。
参考
coder.target
| coder.screener
| coder.ceval
| coder.extrinsic
| codegen
| coder.config
| coder.CodeConfig
| coder.EmbeddedCodeConfig
| coder.MexCodeConfig