Main Content

MATLAB コードからの C/C++ コードの生成

MEX コードの動作を確認したら、プロジェクトのスタンドアロン コードを生成します。

  1. 入力の型を指定します。

  2. 実行時の問題を確認します。

  3. コード生成ビルド設定を構成します。

  4. スタンドアロン C/C++ コードを生成します。

  5. 生成されたコードについて理解します。

入力の型の指定

コードを生成する前に、コード ジェネレーターに対して入力の型を指定します。これにより、コード ジェネレーターは生成コードで使用するデータ型を判定します。

入力の型を自動的に定義するには、入力例を使用して関数を呼び出すか、プロンプトで関数を呼び出すスクリプトを入力します。入力例を指定して入力の型を直接指定します。コードにサイズが 34 列の double の行列が必要な場合、入力例には zeros(3,4) または ones(3,4) を指定できます。

詳細については、コード生成用の入力の型の指定を参照してください。

実行時の問題の確認

コード ジェネレーターに対して入力の型を定義したら、初期コード生成とコード実行を行い、生成されたコード内では診断が困難な実行時エラーを検出します。

  1. コードの MEX ファイルを生成するために、[問題の確認] ボタンをクリックします。

  2. [詳細設定][デバッグ] セクションで [コード生成レポートを常に作成する] オプションを選択すると、コード生成レポートを自動的に開くことができます。

MATLAB で MEX 関数をテストする理由を参照してください。

コード生成ビルド設定の構成

要件に従ってコードを作成するには、コード ジェネレーターの構成設定を変更します。アプリの [コード生成] タブで、タブの下部にある [詳細設定] ボタンを選択します。このウィンドウには、生成コードを変更する構成設定がリストされます。

これらの設定を使用して、生成コードをビルドする場所の指定、ターゲット固有の最適化の適用、可変サイズのサポートの有効化、生成コードにコメントを含める指定、および生成コードに対するその他のカスタマイズの適用を行います。

スタンドアロン C/C++ コードの生成

MEX ファイルを生成して実行時の問題を確認したら、アプリの [コード生成] タブで必要な [ビルド タイプ] を選択してスタンドアロン C/C++ コードを生成します。

プロジェクトのコードを生成するには、[生成] をクリックします。

生成されたコードについての理解

コード生成レポートへのアクセス

コード生成レポートを使用して生成された C/C++ コードを表示し、MATLAB® コードと生成された C/C++ コード間でトレースして、生成されたコードでの潜在的な問題を特定します。

コード生成後にコード生成レポートを開くには、次のようにします。

  • MATLAB Coder™ アプリの [デバッグ] 設定で、[常にレポートを作成][レポート生成時の自動起動] のチェック ボックスをオンにします。

詳細については、コード生成レポートを参照してください。

生成されたコード内の配列のレイアウト

プログラミング言語および環境は、通常、データに対して単一の配列レイアウトを想定します。MATLAB は、既定で列優先のレイアウトを使用しますが、C と C++ は行優先のレイアウトを使用します。

行優先のコードを生成するには、次のようにします。

  1. アプリで [生成] ダイアログ ボックスを開きます。[コード生成] ページで、[生成] 矢印をクリックします。

  2. [詳細設定] をクリックします。

  3. [メモリ] タブで、[配列のレイアウト][行優先] に設定します。

行優先のレイアウトのコード設計を参照してください。

生成されたコード内のメモリの割り当て

コード生成では、配列の次元は "固定サイズ" または "可変サイズ" になります。コード ジェネレーターで次元のサイズと、次元のサイズが変更されていないことを確認できる場合、次元は固定サイズです。配列のすべての次元が固定サイズである場合、配列は "固定サイズ" の配列になります。

プログラム スタックまたはヒープで固定サイズの配列と可変サイズの配列にメモリを割り当てるコードを生成できます。

静的なメモリ割り当てでは、コンパイル時にプログラム スタックで配列にメモリを割り当てます。静的な割り当ては次のような場合に便利です。

  • 使用しているすべての配列の上限がわかっている。

  • 大きいプログラム スタックがある。

  • 配列が小さく、プログラム スタック上で占める領域が少ない。

動的メモリ割り当てでは、スタックでメモリが静的に割り当てられるのではなく、実行時にヒープでメモリが動的に割り当てられます。動的メモリ割り当ては次のような場合に便利です。

  • 配列の上限がわからない。

  • 大きい配列に対してスタックでメモリを割り当てたくない。

動的メモリ割り当てによって、生成されたコードの実行速度が遅くなる場合があります。可変サイズの配列に対するメモリ割り当ての制御を参照してください。

生成されたコードで固定サイズの配列と可変サイズの配列にメモリを動的に割り当てるには、次のようにします。

  1. アプリで [生成] ダイアログ ボックスを開きます。[コード生成] ページで、[生成] 矢印をクリックします。

  2. [詳細設定] をクリックします。

  3. [メモリ] タブで、[可変サイズの配列に対する動的メモリ割り当て] のドロップダウン リストから値を選択します。

  4. [メモリ] タブで、[固定サイズの配列に対する動的メモリ割り当て] のドロップダウン リストから値を選択します。

これらのオプションを 'Threshold' に設定すると、サイズ (バイト単位) がしきい値を超える配列に対して動的に割り当てられます。

ヒント

制限のない配列の最大サイズの定義

サイズがユーザー入力によって異なる配列のコードを生成する場合も、関数 assert を使用してこのような入力の上限を設定できます。次に例を示します。

function inSize(n)
assert(n < 25);
y = zeros(1,n);
end
動的メモリ割り当てを使用できない場合は、配列の上限を定義します。

ファイル I/O のサポート

コード ジェネレーターでは、coder.loadfreadfopenfprintffclose などの関数のサポートに制限があります。

C プロジェクトからの生成されたコードの呼び出し

スタティック ライブラリまたはダイナミック ライブラリを生成すると、コード ジェネレーターによって main 関数の例が用意されます。アプリケーションにおける C の main の例の使用を参照してください。

コマンド ラインでのコードの生成

コマンド ラインでコードを生成し、すべてのコード生成オプションを設定できます。codegen および coder.config を参照してください。

コマンド ラインでコード構成オブジェクトを使用してこれらのオプションを設定することもできます。オプションは、ドット表記でアクセスできる構成オブジェクトのプロパティです。coder.MexCodeConfigcoder.CodeConfig、および coder.EmbeddedCodeConfig を参照してください。

メモ

関連するビルド構成設定を含むダイアログ ボックスを開くには、ワークスペースで構成オブジェクトをダブルクリックします。

スクリプトへのプロジェクトの変換

coder コマンドの -tocode オプションを使用してプロジェクトをスクリプトに変換することもできます。

生成されたコードの最適化

コード ジェネレーターで生成されるコードはほとんどのアプリケーション用に最適化されていますが、次のベスト プラクティスに従ってプロジェクトの効率的な C/C++ コードを生成できます。

  • 引数の参照渡し

  • コードのインライン化

  • 最適化された外部コードの統合

  • 実行時チェックの無効化

詳細については、最適化手法を参照してください。

コマンド ラインでのレポートの作成

コマンド ラインでコードを生成する際に、次の codegen のオプションを使用します。

  • レポートを生成するには、-report オプションを使用します。

  • レポートを生成して開くには、-launchreport オプションを使用します。

あるいは、構成オブジェクトのプロパティを使用します。

  • レポートを生成するには、GenerateReporttrue に設定します。

  • codegen コマンドでレポートを自動的に開く場合は、LaunchReporttrue に設定します。

参考

| | | | | | | | |

関連するトピック