Simulink 環境外での統合コードの作成
生成コードを外部ビルド プロセスで呼び出すために必要なファイルとインターフェイスを特定します。
以下の方法について説明します。
Simulink® 外部での統合コードの作成に必要なファイルを収集する。
外部変数および外部関数とのインターフェイス。
モデル例と関連する例の詳細については、C コード生成のためのコントロール アルゴリズム モデルの準備を参照してください。
必要なデータとファイルの収集とビルド
Embedded Coder® が生成するコードには、MathWorks® が提供するサポート ファイルが必要です。生成コードを専用のビルド システムなどの別の開発環境に移動する場合は、これらのサポート ファイルを移動しなければなりません。これらのファイルは、packNGo
ユーティリティを使って zip ファイルにパッケージ化できます。このユーティリティは、実行可能イメージをビルドしなければならないファイルを見つけてパッケージ化します。ユーティリティはコード生成後にビルド プロセスをカスタマイズするための、buildinfo_data
構造体や関数 packNGo
などを含むツールを使用します。これらのファイルには、[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成]、[カスタム コード] ペインで特定する外部ファイルが含まれています。ユーティリティは buildinfo
MAT ファイルを model
_ert_rtw
フォルダーに保存します。
モデル例 rtwdemo_PCG_Eval_P5
を開きます。
このモデルはコード生成後に packNGo
を実行するように構成されます。
手動で zip ファイルを生成するには、次を実行します。
ファイル
buildInfo.mat
(サブフォルダーrtwdemo_PCG_Eval_P5_ert_rtw
内) を読み込みます。コマンド プロンプトで、コマンド
packNGo(buildInfo)
を入力します。
zip ファイルに含まれるファイルの数は Embedded Coder のバージョンと使用しているモデルの構成により変わります。コンパイラでは zip ファイルにファイルのサブセットが必要となる場合があります。コンパイルされた実行可能ファイルのサイズ (RAM/ROM) はリンク作成プロセスによって変わります。リンカーには必要なオブジェクト ファイルのみが含まれる可能性があります。
生成されたコードの既存のシステムへの統合
この例では、生成されたコードを既存のコード ベースに統合する方法を示します。この例では、Eclipse™ IDE および Cygwin™/gcc コンパイラを使用します。必要な統合のタスクは、統合環境に共通のものです。
統合環境の概要
フル組み込みの制御システムは、ハードウェアとソフトウェアの複数のコンポーネントで構成されます。制御アルゴリズムは、コンポーネントの 1 タイプにすぎません。その他のコンポーネントは以下のいずれかです。
オペレーティング システム (OS)
スケジュール レイヤー
物理的ハードウェア I/O
低水準ハードウェア デバイス ドライバー
通常、生成されたコードはこれらのコンポーネントで使用しません。代わりに、生成されたコードにはこれらのコンポーネントと接続するインターフェイスが含まれます。MathWorks では、多くの一般的な組み込みコントローラーのために、ハードウェア インターフェイス ブロック ライブラリを提供しています。たとえば、Embedded Targets ブロック ライブラリをご覧ください。
この例では、フル システムを作成する手順を示すためのファイルが提供されます。メイン ファイルは example_main.c
です。このファイルには、コードを演習するのに必要な基本アクションのみを実行する単純な main 関数が含まれています。
このファイルは次を行います。
関数インターフェイスを定義する (関数プロトタイプ)。
外部データを宣言するファイルを含める。
extern
データを定義する。データを初期化する。
シミュレートされるハードウェアを呼び出す。
アルゴリズム関数を呼び出す。
関数の実行順序は、テスト ハーネス モデルおよび rtwdemo_PCG_Eval_P5.h
内でのサブシステムの実行順序と一致します。example_main.c
での実行順を変更すると、実行可能イメージで作成される結果はシミュレーション結果と違ったものになります。
システム インターフェイスとの一致
生成コードと既存のシステム コードの統合では、"データ" インターフェイスと "関数" インターフェイスが一致していることが必要です。この例では、example_main.c
ファイルは #include
ステートメントと extern
宣言を通してデータをインポートおよびエクスポートします。ファイルは生成されたコードから関数も呼び出します。
入力データの接続
システムには 3 つの入力信号、pos_rqst
、fbk_1
、fbk_2
があります。生成されたコードはインポートされたグローバル変数 (ストレージ クラス ImportedExtern
) を直接参照して 2 つのフィードバック信号にアクセスします。コードはインポートされたポインター (ストレージ クラス ImportedExternPointer
) を介して位置信号にアクセスします。
手書きの defineImportedData.c
ファイルは変数とポインターを定義します。変数とポインターは手書きのコードによって定義されるため、生成されたコードでは定義されません。代わりに、生成されたコードは rtwdemo_PCG_Eval_P5_Private.h
ファイルにインポートされたデータ (extern
) を宣言します。実際のシステムでは、データは通常、他のソフトウェア コンポーネントまたはハードウェア デバイスから取り込みます。
rtwdemo_PCG_Eval_P5_Private.h
を表示します。
出力データの接続
この例では、システムの出力データにアクセスしません。生成コードのテストの例は、出力データを標準ログ ファイルに保存する方法を示します。rtwdemo_PCG_Eval_P5.h
ファイルを参照すると出力データにアクセスできます。
付加的データへのアクセス
生成されたコードには以下のような一般的に使用されるデータを保存するいくつかの構造体が含まれます。
ブロック状態値 (積分、伝達関数)
ローカル パラメーター
時間
次の表に一般的なデータ構造体を示します。モデルの構成により、生成されたコードにこれらの構造体の組み合わせが表示されます。データが rtwdemo_PCG_Eval_P5.h
ファイルで宣言された場合でも、この例ではこのデータにアクセスしません。
Data Type Data Name Data Purpose
Constants |model_cP| Constant parameters Constants |model_cB| Constant block I/O Output |model_U| Root and atomic subsystem input Output |model_Y| Root and atomic subsystem output Internal data |model_B| Value of block output Internal data |model_D| State information vectors Internal data |model_M| Time and other system level data Internal data |model_Zero| Zero-crossings Parameters |model_P| Parameters
関数呼び出しインターフェイスとの一致
既定の設定では、コード ジェネレーターで生成された関数には void
Func
(void)
インターフェイスがあります。モデルまたは Atomic サブシステムが再呼び出し可能なコードを生成するように構成されている場合、コード ジェネレーターはより複雑な関数プロトタイプを作成します。この例では、関数 example_main
は有効な入力引数で生成された関数を呼び出します。
関数 PI_Cntrl_Reusable
への呼び出しは、個別の構造体化されていないグローバル変数および Simulink Coder™ データ構造体の組み合わせを使用します。手書きのコードでこれらの変数を定義します。構造体の型は rtwdemo_PCG_Eval_P5.h
で定義されます。
Eclipse 環境でのプロジェクトのビルド
この例では、組み込みシステムをビルドするために Eclipse IDE と Cygwin GCC デバッガーを使用します。この例には、両方のプログラムのインストール ファイルが用意されています。ソフトウェア コンポーネントとバージョン番号は次のとおりです。
Eclipse SDK 3.2
Eclipse CDT 3.3
Cygwin/GCC 3.4.4-1
Cygwin/GDB 20060706-2
Eclipse と GCC のインストールおよび使用方法の詳細については、Cygwin と Eclipse のインストールと使い方を参照してください。
この例のファイルは、このハイパーリンクをクリックするとインストールできます。
あるいは、次を実行して手動でファイルをインストールします。
ビルド フォルダー (
Eclipse_Build_P5
) を作成します。rtwdemo_PCG_Eval_P5.zip
ファイルをビルド フォルダーに解凍します。rtwdemo_PCG_Eval_P5.c
、ert_main.c
およびrt_logging.c
の各ファイルはexample_main.c
で置き換えられるために削除します。
Eclipse デバッガーを使用して、ステップ実行し、生成した C コードの実行動作を評価することができます。Cygwin と Eclipse のインストールと使い方の例を参照してください。
入力データを使用してモデルの演習を行うには、生成コードのテストを参照してください。