Main Content

コード生成用の MATLAB コードの準備

C/C++ コードを生成するために、コード ジェネレーターは、動的に型指定される MATLAB® コードを静的に型指定される C/C++ コードに変換します。動的に型指定される言語では、特定の変数のクラス、サイズ、および実数/複素数が実行時に変更される可能性があります。対照的に、静的に型指定される言語では、コンパイル時に変数の型を決定する必要があります。

コードを生成する前に、コード生成の対象とする関数を特定します。この関数は、エントリポイント関数または基本関数と呼ばれます。コード生成用にコードを準備するには、次のようにします。

  1. コード生成用に変数を初期化します。

  2. コードでサポートされない関数および言語機能をスクリーニングします。

コード生成用の変数の初期化

生成コードは静的に型指定されるため、使用前にコード内のすべての変数を初期化して、コード ジェネレーターが生成コードで変数を特定して適切に割り当てることができるようにします。これらの問題の一部を特定するには、コードに次の行を含めます。

%#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++ コードの生成でサポートされている関数およびオブジェクトを参照してください。コードにサポートされない関数および言語機能があるかを確認するには、次のようにします。

  1. [アプリ] タブから MATLAB Coder™ アプリを起動します。あるいは、コマンド ラインで以下を入力します。

    >> coder

  2. アプリにエントリポイント関数名を入力します。この手順ではサブ関数を追加しないでください。コード ジェネレーターによって必要なサブ関数が自動的に含められます。

  3. コード内のサポートされていない関数または言語機能を確認するには、[次へ] をクリックしてコード生成の準備状態ツールのレポートを開きます。

あるいは、エントリポイント関数に対して関数 coder.screener を呼び出します。コマンド ラインに次のように入力します。

coder.screener('filename');

この関数はコードを解析し、サポートされない MATLAB 関数および一部のサポートされない言語機能を強調表示します。coder.screener を参照してください。

コードにサポートされない関数が含まれている場合は、次の回避方法を検討してください。

  • コード生成をサポートする代替の関数と System object があるかを確認します。

  • サポートされていない関数のカスタム コードを記述します。

  • サポートされていない関数を置き換えるカスタム C 関数を呼び出すには、coder.ceval を使用します。

  • サポートされていない関数を呼び出すには、coder.extrinsic を使用します。

これらの回避方法の詳細については、エラーの解決: コード生成でサポートされていない関数を参照してください。

ヒント

コマンド ラインでの詳細なコード生成オプションの設定

関数 codegen を使用して構成オブジェクト coder.config を指定します。ビルドのタイプに応じて、coder.CodeConfigcoder.EmbeddedCodeConfig、および coder.MexCodeConfig も使用できます。

特定の関数のコード生成に関する考慮事項を調べる方法

コード生成でサポートされている関数のリファレンス ページに "拡張機能" というタイトルのセクションが含まれています。このセクションには、これらの関数のコードを生成する際の特別な考慮事項がリストされています。例については、interp2"拡張機能" を参照してください。

coder.extrinsic の呼び出し

coder.extrinsic の呼び出しにより、関数が外部関数として宣言されます。コード ジェネレーターは外部関数の本体のコードを生成せず、代わりに MATLAB エンジンを使用して呼び出しを実行します。

参考

| | | | | | | |

関連するトピック