このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
コード マッピング エディター – C
モデル要素とコード インターフェイス定義の関連付け
説明
コード マッピング エディターは、モデル内のデータ要素およびエントリポイント関数をコード生成用に構成できるグラフィカル インターフェイスです。モデル参照階層内の各モデルに独自のコード マッピングがあります。モデル全体でモデルのデータ要素の各カテゴリを特定のストレージ クラスに関連付け、モデルのエントリポイント関数の各カテゴリを特定の関数カスタマイズ テンプレートに関連付けます。その後、必要に応じて、特定のデータ要素および関数に対するそれらの設定をオーバーライドします。サービス インターフェイス構成を定義する Embedded Coder ディクショナリが接続されたモデルについては、モデルに接続された共有ディクショナリで定義されているサービス インターフェイスにモデルの要素をマッピングできます。
ストレージ クラスでは、コード ジェネレーターが関連付けられたデータのコードを生成するときに使用する外観や場所などのプロパティを定義します。関数カスタマイズ テンプレートでは、関連する関数のコードのコード ジェネレーターでの生成方法を定義します。ストレージ クラスまたは関数カスタマイズ テンプレートの設定を [Default]
のままにする場合、そのデータまたは関数のカテゴリに対するメモリ セクションを構成できます。
コード生成用にデータ要素や関数を構成するには、コード マッピング エディターに表示されるタブを使用します。
データの既定の設定 (データ インターフェイスのみ)
関数の既定の設定 (データ インターフェイスのみ)
関数
入力端子
出力端子
データ転送 (サービス インターフェイスのみ)
パラメーター
データ ストア
信号/状態
モデルの要素に対して構成できる追加のコード マッピング プロパティがある場合、アクティブなテーブルの行を選択して アイコンをクリックすることで、それらのプロパティを構成できます。
コード生成用に信号を構成する前に、信号をモデル コード マッピングに追加します。コード マッピングの信号を追加または削除するには、信号線の上または下に表示される省略記号で一時停止してアクション バーを開きます。[信号の追加] ボタンまたは [信号の削除] ボタンをクリックします。これらのボタンは、コード マッピング エディターの [信号/状態] タブでも使用できます。
コード マッピング エディター – C を開く
次のいずれかを行います。
Embedded Coder® アプリを開きます。データ インターフェイス構成の場合は、[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択するか、[コード インターフェイス] 、 [個々の要素コードのマッピング] を選択します。サービス インターフェイス構成の場合は、[C コード] タブで、[コード インターフェイス] 、 [コンポーネント インターフェイス] を選択するか、[コード インターフェイス] 、 [サブコンポーネント インターフェイス] を選択します。
Embedded Coder アプリを開きます。[C コード] タブで、Simulink® エディター ウィンドウの左下隅にある [コード マッピング] タブをクリックします。
Simulink エディター ウィンドウのモデル キャンバスで、右下隅にあるパースペクティブ コントロールをクリックし、[コード] を選択します。次に、[コード マッピング] タブをクリックします。
例
ルートの Inport ブロックと Outport ブロックについてのコード生成の構成
ルートの Inport ブロックと Outport ブロックについてのモデル全体のコード生成を構成します。大量のデータを使用する大規模なモデルの場合は特に、既定の構成を適用すると時間を節約できます。既定のマッピングを適用した後、個々のデータ要素のマッピングを調整できます。
モデル
RollAxisAutopilot
を開きます。現在の作業ディレクトリに含まれる外部コード ファイルは次のとおりです。openExample('RollAxisAutopilot');
roll_input_data.c
roll_input_data.h
roll_heading_mode.c
roll_heading_mode.h
Embedded Coder アプリを開きます。
コード ジェネレーターの処理を次のように構成します。
ヘッダー ファイル
roll_input_data.h
を使用して、モデルの Inport ブロックを表す変数を宣言する。モデルの Outport ブロックの変数を別個のグローバル変数として表す。
出力変数を
roll_output_data.c
で定義し、それらをroll_output_data.h
で宣言する。Inport ブロックのコードでコード ジェネレーターが生成する変数に使用する名前を構成する。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
[データの既定の設定] タブで、[Inports and Outports] の下にある [入力端子] の行を選択します。次に、ストレージ クラスを
[ImportFromFile]
に設定します。アイコンをクリックし、[ヘッダー ファイル] を
roll_input_data.h
に設定します。モデル要素カテゴリ [出力端子] のストレージ クラスを
[ExportToFile]
に設定します。[ヘッダー ファイル] を
roll_output_data.h
、[定義ファイル] をroll_output_data.c
に設定します。
コード マッピング エディターで、[入力端子] タブをクリックします。各 Inport のストレージ クラスは
Auto
に設定されています。これは、コード ジェネレーターが最適化を目的として関連するコードの表現を削除または変更する可能性があることを意味しています。最適化が不可能な場合、コード ジェネレーターは入力端子に対して既定の構成を適用します。入力端子に対して既定の構成であるストレージ クラス
ImportFromFile
を強制的に適用して、外部ヘッダー ファイルroll_input_data.h
を使用するようにコード ジェネレーターを構成します。Ctrl キーを押しながら入力端子を選択します。選択したいずれかの入力端子に対して、ストレージ クラスを[Model default: ImportFromFile]
に設定します。選択した入力端子について、エディターでストレージ クラス設定が更新されます。
入力端子の変数 HDG_Mode
について、既定のソースの場所をオーバーライドします。その変数は外部ファイル roll_heading_mode.h
で宣言されています。
コード マッピング エディターで、[入力端子] タブをクリックします。
HDG_Mode
の行を選択します。[ストレージ クラス] を
ImportFromFile
に設定します。アイコンをクリックし、[ヘッダー ファイル] を
roll_heading_mode.h
に設定します。Inport ブロックのコードで外部ファイル
roll_input_data.h
およびroll_heading_mode.h
の変数名と一致する変数名を生成するようにコード ジェネレーターを構成します。[入力端子] タブで、各 Inport ブロックを選択し、アイコンをクリックして [識別子] をブロック名に設定します。ストレージ クラスが
[自動]
以外の値に設定されている場合、[識別子] ストレージ クラス プロパティの値を指定できます。[識別子] プロパティを空のままにすると、コード ジェネレーターはモデリング要素に関連付けられているブロックまたは信号の名前を使用します。
コード生成およびビルド プロセスに外部ソース ファイルの roll_input_data.c
と roll_heading_mode.c
を含めます。モデル コンフィギュレーション パラメーター [ソース ファイル] を roll_input_data.c roll_heading_mode.c
に設定します。
モデルを保存します。
コードを生成し、Inport ブロックと Output ブロックについての生成されたコードが想定どおりであることを確認します。
ストレージ クラスに関連付けられた次のヘッダー ファイルが
RollAxisAutopilot.h
に含まれている。#include "roll_output_data.h" #include "roll_input_data.h" #include "roll_heading_mode.h"
roll_heading_mode.c
にroll_heading_mode.h
が含まれ、変数HDG_Mode
が定義されている。#include "roll_heading_mode.h" boolean_T HDG_Mode;
roll_input_data.h
で宣言された変数がroll_input_data.c
で定義されている。#include "roll_input_data.h" boolean_T AP_Eng; real32_T HDG_Ref; real32_T Rate_FB; real32_T Phi; real32_T Psi; real32_T TAS; real32_T Turn_Knob;
次のエクスポートされたデータの定義が
roll_output_data.c
に含まれている。real32_T Ail_Cmd;
次のエクスポートされたデータの宣言が
roll_output_data.h
に含まれている。extern real32_T Ail_Cmd;
エントリポイント関数に対する既定の関数名の構成
既定では、コード ジェネレーターは識別子の命名規則 $R$N
を使用してエントリポイント関数に名前を付けます。$R
はルート モデルの名前です。$N
は関数の名前 (initialize
、step
、terminate
など) です。生成されたコードを既存の外部コードと統合するか、命名規約またはガイドラインに準拠するには、既定の命名規則を調整できます。この例では、$R$
にテキスト文字列 myproj_
を接頭辞として追加する方法を示します。既定の命名規則を調整すると、特にコード ジェネレーターによって各レートに固有の関数 step
が生成されるマルチレート モデルの場合は時間を節約できます。
モデル
MultirateMultitasking
を開きます。書き込み可能なフォルダーにコピーを保存します。Embedded Coder アプリを開きます。[C コード] タブが開き、コード マッピング エディターも表示されます。
命名規則 myproj_$R$N
を定義する関数カスタマイズ テンプレートを作成します。
Embedded Coder ディクショナリを開きます。[C コード] タブで、[コード インターフェイス] 、 [Embedded Coder ディクショナリ] を選択します。
[関数カスタマイズ テンプレート] タブをクリックします。
[追加] をクリックします。
新しいテーブル行の [名前] 列で、新しいテンプレートに
myproj_FunctionTemplate
という名前を付けます。[関数名] 列で、命名規則
myproj_$R$N
を入力します。Embedded Coder ディクショナリを閉じます。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
[関数の既定の設定] タブをクリックします。
[初期化/終了] と [実行] の関数カテゴリについて、既定の関数カスタマイズ テンプレートを
Default
からmyproj_FunctionTemplate
に変更します。モデルを保存します。
コードを生成し、エントリポイント関数の名前を確認します。
void myproj_MultirateMultitasking_step0(void) /* Sample time: [1.0s, 0.0s] */ { (rtM->Timing.RateInteraction.TID0_1)++; if ((rtM->Timing.RateInteraction.TID0_1) > 1) { rtM->Timing.RateInteraction.TID0_1 = 0; } if (rtM->Timing.RateInteraction.TID0_1 == 1) { rtDW.RateTransition = rtDW.RateTransition_Buffer0; } rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s; rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2; } /* Model step function for TID1 */ void myproj_MultirateMultitasking_step1(void) /* Sample time: [2.0s, 0.0s] */ { rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE; rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s; } void myproj_MultirateMultitasking_initialize(void) { /* (no initialization code required) */ } void myproj_MultirateMultitasking_terminate(void) { /* (no terminate code required) */ }
個々のエントリポイント関数のカスタマイズ
モデルについて、ステップ関数や Simulink 関数など、ほとんどのエントリポイント関数の名前と実行関数の引数をカスタマイズできます。この例では、モデル RollAxisAutopilot
のエントリポイント関数をカスタマイズする方法を示します。
モデル
RollAxisAutopilot
を開きます。現在の作業ディレクトリに含まれる外部コード ファイルは次のとおりです。openExample('RollAxisAutopilot');
roll_input_data.c
roll_input_data.h
roll_heading_mode.c
roll_heading_mode.h
Embedded Coder アプリを開きます。[C コード] タブが開き、コード マッピング エディターも表示されます。
[C コード] タブで、[コード インターフェイス] 、 [個々の要素コードのマッピング] を選択します。
[Functions] タブを選択します。
ステップ (実行) 関数の名前をカスタマイズします。[関数名] 列で、名前
roll_run
を入力します。step
関数の引数をカスタマイズします。[関数プレビュー] 列でプロトタイプのハイパーリンクをクリックして、step
関数の構成ダイアログ ボックスを開きます。[ステップ関数プロトタイプの引数を設定] を選択します。
引数の既定の構成を表示するテーブルを開くには、[既定値を取得] をクリックします。
引数をカスタマイズします。
[C 戻り引数] ドロップダウン リストから
[Ail_Cmd]
を選択します。それぞれの端子の [C 識別子名] フィールドで、それらの既定の名前から接頭辞
arg_
を削除します。HDG_Mode
入力端子の [C 型修飾子] ドロップダウン リストから[ポインター]
を選択します。[C 識別子名] フィールドで、名前をHDG_Mode_Ptr
に変更します。
[適用] をクリックし、関数のプロトタイプに変更が反映されることを確認します。
[検証] をクリックして変更を検証します。
[OK] をクリックします。
コードを生成します。
生成された C ファイル
RollAxisAutopilot.c
で更新内容を確認します。更新されたstep
関数 (roll_run
) を探すには、[検索] フィールドを使用します。step
関数を選択して、そのプロトタイプを確認します。real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS, boolean_T AP_Eng, boolean_T *HDG_Mode_Ptr, real32_T HDG_Ref, real32_T Turn_Knob)
関連する例
- モデル インターフェイス要素の C コード生成の構成
- データ構成アプローチの選択
- 生成されたコードでのデータ表示を制御するストレージ クラスの選択
- Configure Default C Code Generation for Categories of Data Elements and Functions
- 生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成
パラメーター
バージョン履歴
R2018a で導入