Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

C/C++ コードを生成するために、コード ジェネレーターは、動的に型指定された 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++ コード生成のための変数定義のベスト プラクティスを参照してください。

コードでのサポートされない関数および言語機能のスクリーニング

コード ジェネレーターではほとんどの言語機能と関数がサポートされています。コードにサポートされない関数および言語機能があるかを確認するには、次のようにします。

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

    >> coder

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

  3. コード生成の準備状態ツール レポートを取得するには、[次へ] をクリックします。コードにサポートされない関数または言語機能がある場合は、ここで報告されます。

あるいは、エントリポイント関数に対してスクリーナーを呼び出します。コマンド ラインで、次のコマンドを実行します。

coder.screener('filename');

このツールはコードを解析し、サポートされない MATLAB 関数および一部のサポートされない言語機能を強調表示します。C/C++ コードの生成でサポートされている関数およびオブジェクトおよび coder.screener を参照してください。

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

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

  • これらの関数のカスタム コードを記述します。

    coder.ceval を使用して、その関数に対応するカスタム C 関数を呼び出します。

  • coder.extrinsic を使用して関数を呼び出します。

ヒント

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

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

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

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

coder.extrinsic の呼び出し

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

参考

| | | | | | | |

関連するトピック