Main Content

生成コードの展開

展開は、MATLAB® 環境の外で実行されるアプリケーションの生成されたコードを使用するプロセスです。展開プロセスには、多くのトピックと考慮事項が関連します。

main 関数

アプリケーションを作成するには、MATLAB 関数から生成された C/C++ エントリポイント関数を呼び出す C/C++ main 関数を作成または使用します。main 関数では入力、出力、その他の MATLAB アルゴリズムでは指定されていない機能を指定します。コード ジェネレーターは既定で main 関数の例を作成します。生成されたこの main 関数の例を、新しい main 関数を作成するための開始点として使用します。main の例は、生成されたコードへの入力とコードからの出力を渡す方法についての明確な例を提供します。詳細と例については、以下を参照してください。

C/C++ コードは、生成された C/C++ エントリポイント関数に加え、初期化関数と終了関数を呼び出さなければなりません。既定では、生成された C/C++ エントリポイント関数は初期化関数を呼び出します。生成された main 関数の例では、終了関数を呼び出します。自身の main 関数を作成して編集するとき、初期化関数と終了関数の両方を呼び出すようにします。詳細については、以下を参照してください。

生成された関数インターフェイス

main 関数を記述するには、生成された関数インターフェイスに関する知識を必要とします。

データ型

生成された C/C++ 関数のプロトタイプは、自身の MATLAB コードで使用する型に対応するデータ型を使用します。生成コードの型への MATLAB 型のマッピングを参照してください。Embedded Coder® を使用して、生成されるデータ型の外観とスタイルをカスタマイズできます。コードの外観 (Embedded Coder)を参照してください。

引数渡しの動作

MATLAB Coder™ から生成される C/C++ エントリポイント関数は以下の規則に従います。

  • 入力配列を参照渡しで渡す。

  • 出力配列を参照渡しで返す。

  • 入力スカラーを値渡しで渡す。

  • 単出力の関数の場合はスカラーを値渡しで返す。

  • 次の場合はスカラーを参照渡しで返す。

    • 出力が複数ある関数の場合。

    • 同じ変数を入力および出力として使用する場合。

MATLAB コードで同じ変数を入力および出力として使用する場合、生成されるコードはスカラーを参照渡しで渡します。生成されたコードでの関数入力のデータ コピーの回避を参照してください。

配列の定義

固定サイズの配列と可変サイズの配列は、生成される C/C++ コードでは異なるデータ型で表されます。詳細については、生成された関数インターフェイスでの C 配列の使用を参照してください。

実行可能なアプリケーション

コードを生成し、その生成されたコードを使用する main ファイルを記述した後、MATLAB Coder または他のビルド ツールのいずれかを使用して、コードを実行可能ファイルにビルドしなければなりません。その実行可能ファイル アプリケーションを、ホスト プラットフォームである MATLAB プラットフォーム、またはターゲット プラットフォームである別のプラットフォームで実行する必要がある場合があります。ターゲットプラットフォームに手動で転送できるよう、生成されたコードで必要な要素をエクスポート可能な zip ファイルにパッケージ化するには、関数 packNGo を使用します。

コード生成フォルダーは、生成されるコードで使用するすべてのファイルを必ずしも含んでいるとは限りません。フォルダーには、生成されるコードで使用しないサポート ファイルが含まれていることもあります。コード生成フォルダーの内容全体を含めて移動するよりも、packNGo を使用して、生成されるコードファイルをパッケージ化して移動します。

バイナリの展開

codegen コマンドを使用するか、または、スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイル (lib、dll、または exe) のビルド タイプを選択して MATLAB Coder アプリを使用して、バイナリを直接生成できます。既定では、生成されたバイナリは、ホスト プラットフォーム ハードウェアとオペレーティング システムで機能します。実行可能ファイルをビルドするには、main ファイルを指定または提供しなければなりません。例については、MATLAB コードからのスタンドアロン C/C++ 実行可能ファイルの生成を参照してください。構成オブジェクトの GenerateExampleMain プロパティを 'GenerateCodeAndCompile' に設定した場合、コード ジェネレーターは、生成された main ファイルの例を使用して実行可能ファイルをビルドします。

コードを別のプラットフォームに展開する場合、そのプラットフォーム用のバイナリ コードを生成しビルドするためのサポートを提供するハードウェア サポート パッケージを使用できます。このサポートには、ターゲット ハードウェアで必要な、特定のツールチェーンとコード生成構成設定が含まれています。MATLAB Coder 用に提供されるサポート パッケージのリストについては、MATLAB Coder でサポートされているハードウェアを参照してください。Embedded Coder では、多くの追加ハードウェア サポート パッケージが入手可能です。Embedded Coder でサポートされているハードウェア (Embedded Coder)を参照してください。ハードウェア サポート パッケージでは入手できないビルド用のカスタム ツールチェーンを指定する場合は、独自のツールチェーンを登録できます。カスタム ツールチェーンの登録を参照してください。

MATLAB Coder アプリで、[コードの生成] 手順の中で [ハードウェア ボード] ドロップダウン リストからハードウェア サポート パッケージを選択します。コマンド ラインからは、関数 coder.hardware を使用してハードウェア サポート パッケージを指定します。

ソース コードの展開

場合によっては、ソース コードを生成して、プロジェクト用に手動でソース コードをビルドする方法を選択することがあります。次の場合にはソース コードを手動でビルドします。

  • 生成されたソース コードのビルドが容易である。たとえば、生成されたコードでは追加のライブラリに対するリンクが不要である場合など。

  • ハードウェア サポート パッケージがないカスタム ハードウェア向けの実行可能ファイルを作成する。

  • C/C++ ソース コードのビルドについて十分な知識がある、または、ターゲット プラットフォーム向けのビルド システムが既に構成済みである。

コード ジェネレーターは、MATLAB Coder がバイナリ出力の作成に使用するビルド情報を表示して変更できるようにする buildInfo オブジェクトを作成します。この情報を、生成されたコードを手動でビルドする方法の理解に使用できます。ビルド プロセスのカスタマイズおよび RTW.BuildInfo (Embedded Coder) を参照してください。

コード ジェネレーターは、コンパイルおよびリンク フラグなどのビルド情報を示す makefile を作成します。この makefile はコード生成フォルダーにあります。生成された makefile は、ハードウェア サポート パッケージの選択によって指定するターゲット プラットフォーム、またはホスト プラットフォーム (ハードウェア サポート パッケージを指定しない場合) に固有のものです。ソース コードを手動でビルドする場合、この makefile を使用して、コンパイルおよびリンク フラグなどのビルド要件の特定とトラブルシューティングができます。

ターゲット プラットフォーム向けのコード生成とビルドを手動で構成する方法については外部ハードウェアへの生成された C コードの展開: Raspberry Pi の例を参照してください。

スタティック ライブラリとダイナミック ライブラリ

生成されたコードの機能を既存の C/C++ プロジェクトで使用する場合に、スタティック ライブラリまたはダイナミック ライブラリを生成できます。ライブラリは、生成されたソース コードよりもモジュール化されたインターフェイスを提供できます。MATLAB Coder がスタティック ライブラリまたはダイナミック ライブラリを生成する場合、次のようになります。

  • ライブラリは、作業しているプラットフォームに適したものとなる (ハードウェア サポート パッケージを通じて別のプラットフォームを指定した場合を除く)。

  • 生成された C コードのヘッダー ファイルは、C++ アプリケーションへのライブラリ統合を単純化するため、エクスポートされた関数を extern "C" として明示的に宣言する。

  • 生成されたライブラリ ファイルの拡張子は MATLAB ホスト プラットフォーム オペレーティング システムに対応する。

    オペレーティング システムスタティック ライブラリダイナミック ライブラリ
    Windows®.lib.dll および .lib (対応するインポート ライブラリによる)
    macOS.a.dylib
    Linux®.a.so

実行可能ファイルをビルドする際にはライブラリに対するコンパイルとリンクを行わなければなりません。ダイナミック ライブラリを使用する実行可能ファイルを実行する際、ライブラリはシステム パス上、または実行可能ファイルのフォルダーになければなりません。生成されたライブラリの使用の例については、次を参照してください。

関数 loadlibrary を使用して、生成されたダイナミック ライブラリを MATLAB に読み込むことは推奨されず、結果として正しくない動作やクラッシュに至る可能性があります。

生成されるファイルの構造

既定では、MATLAB Coder はそれぞれの MATLAB コード ファイルについて 1 つの C コード ファイルを作成します。生成されたコードを単一のファイルに分割し、カスタマイズされた出力フォルダーとバイナリの名前でコードを生成するよう選択することができます。MATLAB Coder が生成コードを分割する方法を参照してください。

Embedded Coder を使用して、生成されるファイルの名前をカスタマイズできます。Customize C/C++ File Names Generated from MATLAB Code (Embedded Coder)を参照してください。

コード検証

MATLAB 環境の外での実行のため生成されたコードを展開する前に、MATLAB 環境内で検証できます。MATLAB Coder を使用した検証の基本的なワークフローは C/C++ MEX 関数の生成と実行です。MEX 関数は MATLAB 環境内で実行され、ランタイム エラー チェックと診断を提供します。コード検証を参照してください。

Embedded Coder は、コード検証とテストに追加の深い機能を提供します。ソフトウェアインザループ (SIL) 実行およびプロセッサインザループ (PIL) 実行を使用して、生成されたコードの MATLAB 環境の外のソフトウェアおよびハードウェアでの動作をテストできます。検証 (Embedded Coder)を参照してください。

カスタム ハードウェアの考慮事項

ターゲットが single データ型のみをサポートし double データ型をサポートしない場合、codegen -singleC オプションを使用して単精度のコードを生成できます。このオプションには Fixed-Point Designer™ が必要です。ターゲットが整数データ型のみをサポートする場合は、-float2fixed オプションを使用します。codegen を参照してください。

その他の展開の方法

MATLAB Coder は MATLAB 言語のサブセットに対して、読み取り可能で移植可能な C/C++ コードを生成します。MATLAB Runtime ライブラリを使用するものの MATLAB ライセンスなしで実行するホスト プラットフォーム向けのスタンドアロン実行可能アプリケーションを生成する場合は、MATLAB Compiler SDK™ を使用します。製品の比較については、https://www.mathworks.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-deploy-my-matlab-programsを参照してください。

参考

|

関連するトピック

外部の Web サイト