Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Embedded Coder ディクショナリ

モデル データおよび関数のコード生成を制御するためのコード定義を作成します。

説明

Embedded Coder ディクショナリは、コード インターフェイス構成の格納と制御に使用するファイルです。インターフェイス構成で、生成コードが展開先のターゲット プラットフォーム ソフトウェアと対話する方法を定義するカスタム コード インターフェイス定義を作成します。構成をモデルに適用することで、特定のソフトウェア アーキテクチャに既定で準拠するコードを生成できます。たとえば、独自のストレージ クラスを作成して、そのクラスをルートレベルの入力などのモデル データのカテゴリ、またはパラメーターなどの個々のデータ要素に既定で適用できます。

ディクショナリには、次のタイプのインターフェイス構成のいずれか 1 つのみが含まれます。

  • データ インターフェイス構成 — ターゲット デバイスで実行することを目的としたプログラムがコード ジェネレーターで作成されます。定義したデータ インターフェイスが生成コードで使用されます。

  • サービス インターフェイス構成 — より大きなアプリケーション内で展開することを目的としたアルゴリズムがコード ジェネレーターで作成されます。プラットフォーム ミドルウェアでアルゴリズムのコードが呼び出され、ターゲット デバイス向けのサービスが提供されます。サービス インターフェイス構成の定義に従って生成コードでサービスが呼び出されます。サービス インターフェイス構成を作成するには、Simulink データ ディクショナリに格納された Embedded Coder ディクショナリを使用する必要があります。 (R2022b 以降)

インターフェイス構成では、次のタイプのコード インターフェイス定義を作成できます。

  • ストレージ クラス。モデル データ用に生成されたコードを制御します。

  • 関数カスタマイズ テンプレート。model_step などのモデルのエントリポイント関数の命名を制御します。テンプレートでは、メモリ セクションもエントリポイント関数に適用します。

  • メモリ セクション。メモリにおけるデータおよび関数の配置を制御します。生成コードには、プラグマなどの、指定した構文をもつカスタムの装飾が含まれます。

  • サービス。データ転送サービスやタイマー サービスなど、ターゲット プラットフォーム ソフトウェアで提供されるサービスを生成コードで呼び出す方法を制御します。サービスの定義はサービス インターフェイス構成でのみ使用できます。

コード生成定義の作成に関する一般的な詳細については、Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architectureを参照してください。

Embedded Coder® ディクショナリには、コード定義の各タイプのペインがあります。右側のペインを使用して各定義のプロパティを設定します。プロパティを構成したときに結果を確認するには、疑似コードのプレビューを使用します。

コード マッピング エディターを使用して、ディクショナリで作成した定義をモデル要素に適用できます (Configure Default C Code Generation for Categories of Data Elements and Functionsを参照)。コード マッピング エディター外で使用できるストレージ クラスとメモリ セクションを作成するには、カスタム ストレージ クラス デザイナーを使用します (Create Code Definitions for External Data Objectsを参照)。

Embedded Coder ディクショナリ を開く

  • Embedded Coder ディクショナリを開くには、モデル ウィンドウの [アプリ] ギャラリーを開き、[Embedded Coder] をクリックして Embedded Coder アプリを開きます。[C コード] タブで [コード インターフェイス][Embedded Coder ディクショナリ] を選択します。Embedded Coder ディクショナリ ウィンドウに、ディクショナリに格納されているコード インターフェイス構成が表示されます。

  • Simulink® データ ディクショナリで Embedded Coder ディクショナリを開くには、モデル エクスプローラーの [モデルの階層構造] ペインで、次の操作を行います。

    1. ディクショナリ ノードの下で、[Embedded Coder] ノードを選択します。

      ノードが表示されない場合は、ディクショナリ ノードを右クリックして [空のセクションを表示] を選択します。

    2. [ダイアログ] ペイン (右側のペイン) で、[Embedded Coder ディクショナリを開く] をクリックします。

ストレージ クラスの作成および検証

モデルで、ブロックの状態を含む内部モデル データを、制御できる特性をもつ構造体に集約するストレージ クラスを作成します。その後に、モデルからコードを生成してストレージ クラスを検証します。

  1. 次のコマンドを入力して、RollAxisAutopilot モデルを開きます。

    openExample('RollAxisAutopilot');

  2. モデルが Embedded Coder アプリで開かない場合は、アプリを開いて、[C コード] タブをクリックします。

  3. [C コード] タブで [コード インターフェイス][Embedded Coder ディクショナリ] を選択します。[Embedded Coder ディクショナリ] ウィンドウには、モデル ファイルに保存されているコード生成定義が表示されます。

  4. 左側のペインで、[ストレージ クラス] をクリックします。[ストレージ クラス] セクションで、[作成] をクリックします。

  5. リストの末尾に表示されている新しいストレージ クラス StorageClass1 を選択します。右側のペインで、次の表にリストされているプロパティ値を設定します。

    プロパティ
    名前InternalStruct
    ヘッダー ファイルinternalData_$R.h
    定義ファイルinternalData_$R.c
    ストレージ タイプStructured
    [構造体のプロパティ][タイプ名]internalData_T_$M
    [構造体のプロパティ][インスタンス名]internalData_$M

    変更後、下部のペインで、疑似コードのプレビューに想定どおりの内容が反映されているか確認します。

  6. モデル エディターに戻ります。インターフェイス エディターを開くには、キャンバスの下で、[コード マッピング] をダブルクリックします。[データの既定の設定] タブで、[信号] セクションを展開します。[Signals, states, and internal data] 行を選択し、[ストレージ クラス][InternalStruct] に設定します。

  7. [コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成][コード配置] ペインで、[ファイル パッケージ化形式][モジュラー] に設定します。

  8. コードを生成します。

  9. Simulink エディターのコード ビューで、internalData_RollAxisAutopilot.h ファイルを開いて検査します。このファイルでは、構造体型 internalData_T_ を定義しています。そのフィールドはモデル内のブロックの状態を表します。

    /* Storage class 'InternalStruct', for system '<Root>' */
    typedef struct {
      real32_T FixPtUnitDelay1_DSTATE;     /* '<S7>/FixPt Unit Delay1' */
      real32_T Integrator_DSTATE;          /* '<S1>/Integrator' */
      int8_T Integrator_PrevResetState;    /* '<S1>/Integrator' */
    } internalData_T_;

    また、このファイルでは internalData_ という名前のグローバル構造体変数も宣言しています。

    /* Storage class 'InternalStruct' */
    extern internalData_T_ internalData_;

  10. ファイル internalData_RollAxisAutopilot.c を開いて検査します。このファイルでは、internalData_ にメモリを割り当てています。

    /* Storage class 'InternalStruct' */
    internalData_T_ internalData_;

関数カスタマイズ テンプレートの作成

関数テンプレートを使用して、生成されたエントリポイント関数の名前を制御する規則を指定できます。この手法を使うと、エクスポート関数モデルやマルチレートでマルチタスクのモデルなど、多くのエントリポイント関数があるモデルで時間を節約し、保守作業を削減できます。

この例は、命名規則 func_$N_$R を指定する関数テンプレートを作成する方法を示しています。$N は生成される各関数のベース名で、$R は Simulink モデルの名前です。

  1. モデル例 MultirateMultitaskingBareBoard を開きます。

  2. ブロック線図を更新します。このマルチタスク モデルには 2 つの実行レートがあるため、生成されるコードには対応する 2 つのエントリポイント関数が含まれます。

  3. モデルで、モデル コンフィギュレーション パラメーター [システム ターゲット ファイル]ert.tlc に設定します。関数カスタマイズ テンプレートを使用するには、ERT ベースのシステム ターゲット ファイルを使用する必要があります。

  4. Simulink エディターで、Embedded Coder アプリを開いて、Embedded Coder ディクショナリを開きます。

  5. Embedded Coder ディクショナリの [関数カスタマイズ テンプレート] タブで [作成] をクリックします。

  6. 新しい関数テンプレートに対して、次のプロパティを設定します。

    • [名前]myFunctions にします。

    • [関数名]func_$N_$R にします。

    変更後、疑似コードのプレビューに想定どおりの内容が反映されているか確認します。

  7. モデル ウィンドウで、コード マッピング エディターを開きます。[関数の既定の設定] タブの [初期化/終了] 行と [実行] 行で、[関数カスタマイズ テンプレート][myFunctions] に設定します。

  8. コードを生成します。

  9. コード ビューで、ファイル MultirateMultitaskingBareBoard.c を開いて検証します。このファイルでは、2 つの実行関数 func_step0_MultirateMultitaskingBareBoardfunc_step1_MultirateMultitaskingBareBoard を定義しています。その名前は、関数テンプレートで指定した規則に準拠しています。

メモリ セクションの作成方法を示す例については、Control Data and Function Placement in Memory by Inserting Pragmasを参照してください。

静的および動的に初期化されたデータで使用するストレージ クラスの作成

この例では、名前がモデル名に依存しているファイルにグローバル変数の定義と宣言を保存するストレージ クラスを作成する方法を示します。ストレージ クラスのコピーを 2 つ作成して、1 つのコピーをパラメーター データ (データ カテゴリ [モデル パラメーター]) で使用し、もう 1 つのコピーを他のデータで使用できるようにします。

通常、生成されたコードは、パラメーター データを関数外で静的に初期化し、他のデータをモデル初期化関数で動的に初期化します。カスタム ストレージ クラス デザイナーまたは Embedded Coder ディクショナリを使用してストレージ クラスを作成する場合は、[データの初期化] プロパティを設定して初期化メカニズムを指定します。

Embedded Coder ディクショナリでは、ストレージ クラスごとに、[静的] または [動的] の初期化を選択しなければなりません。ストレージ クラスはパラメーター データ用 ([静的]) と他のデータ用 ([動的]) に 1 つずつコピーを作成することを検討してください。

ストレージ クラスの作成
  1. 次のコマンドを入力して、RollAxisAutopilot モデルを開きます。

    openExample('RollAxisAutopilot');

  2. [C コード] タブが開いていない場合は、Embedded Coder アプリを開いて、[C コード] タブをクリックします。

  3. [コード インターフェイス][Embedded Coder ディクショナリ]を選択します。

  4. 左側のペインで、[ストレージ クラス] をクリックします。[ストレージ クラス] セクションで、[作成] をクリックします。

  5. 新しいストレージ クラスの場合は、次のプロパティを設定します。

    • [名前]SigsStates にします。

    • [ヘッダー ファイル]$R_my_data.h にします。

    • [定義ファイル]$R_my_data.c にします。

    • [データの初期化][動的] にします。

    変更後、疑似コードのプレビューに想定どおりの内容が反映されているか確認します。

  6. ストレージ クラス [SigsStates] の行にカーソルを合わせて、[コード定義を複製します] をクリックします。新しいストレージ クラス SigsStates_copy が表示されます。

  7. 新しいストレージ クラスの場合は、次のプロパティを設定します。

    • [名前]Params にします。

    • [データの初期化][静的] にします。

    疑似コードのプレビューに想定どおりの内容が反映されているか確認します。

ストレージ クラスの適用とコードの生成
  1. モデルで、コード マッピング エディターを開きます。モデル キャンバスの下で、[コード マッピング - コンポーネント インターフェイス] をダブルクリックします。

  2. [データの既定の設定] タブで、[パラメーター][モデル パラメーター] 行の [ストレージ クラス] 列にある [Params] を選択します。

  3. [信号][Signals, states, and internal data] の行で、[ストレージ クラス][SigsStates] に設定します。

  4. モデルでいくつかのパラメーター データ要素を構成して、最適化によってこれらの要素が生成されたコードから除去されないようにします。[モデル化] タブで、[設計][モデル ワークスペース] をクリックします。

  5. モデル エクスプローラーの中央のペインで、モデル ワークスペースの変数 dispGainintGainrateGain に対応する 3 つの行を選択します。

  6. 行の 1 つを右クリックして、[パラメーター オブジェクトに変換] をクリックします。モデル データ エディターにより、ワークスペース変数が Simulink.Parameter オブジェクトに変換されます。

  7. dispGain パラメーター行の [ストレージ クラス] 列で、[構成] をクリックします。モデル ウィンドウのコード マッピング エディターに dispGain パラメーターの行が強調表示されます。

  8. 変数ごとに、[ストレージ クラス] 列で、[Model default:Params] を選択します。これは、[モデル パラメーター] で指定した既定のストレージ クラスを取得することを表します。

  9. [コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成][コード配置] ペインで、[ファイル パッケージ化形式][モジュラー] に設定します。

  10. コードを生成します。

  11. コード ビューで、RollAxisAutopilot_my_data.c ファイルと RollAxisAutopilot_my_data.h ファイルを開いて検査します。これらのファイルでは、パラメーター オブジェクトおよび一部のブロックの状態 (BasicRollMode サブシステム内の Integrator ブロックの状態など) に対応するグローバル変数を定義して宣言します。

    /* Storage class 'SigsStates' */
    real32_T rtFixPtUnitDelay1_DSTATE;
    real32_T rtIntegrator_DSTATE;
    int8_T rtIntegrator_PrevResetState;
    
    /* Storage class 'Params' */
    real32_T dispGain = 0.75F;
    real32_T intGain = 0.5F;
    real32_T rateGain = 2.0F;

パッケージ内のコード生成定義の参照

パッケージに保存されているコード生成定義を参照するように Embedded Coder ディクショナリを構成できます (Create Code Definitions for External Data Objectsを参照)。これらの定義は、コード マッピング エディターに選択できる状態で表示されます。この例では、組み込みのパッケージ例 ECoderDemos 内に保存されている定義を参照するように、RollAxisAutopilot 内の Embedded Coder ディクショナリを構成します。

  1. RollAxisAutopilot の Embedded Coder ディクショナリを開きます。手順については、ストレージ クラスの作成および検証を参照してください。

  2. Embedded Coder ディクショナリ ウィンドウの [メモリ] タブで、[パッケージの管理] をクリックします。

  3. [パッケージの管理] ダイアログ ボックスで、[更新] をクリックします。追加オプションが [パッケージの選択] ドロップダウン リストに表示されるまで待ちます。

  4. [パッケージの選択][ECoderDemos] に設定し、[読み込み] をクリックします。

    [Embedded Coder ディクショナリ] ウィンドウの [ストレージ クラス] タブのテーブルに、ECoderDemos パッケージで定義されたストレージ クラスが表示されます。次に、RollAxisAutopilot では、コード マッピング エディターの [データの既定の設定] タブでこれらのストレージ クラスを選択できます。

  5. パッケージをアンロードするには、[パッケージの管理] ダイアログ ボックスの [パッケージの選択] ドロップダウン リストでパッケージを選択し、[アンロード] をクリックします。

データ ディクショナリを使用してモデル間でコード生成定義を共有する方法を示す例については、Share Code Interface Configuration Between Modelsを参照してください。

共有 Embedded Coder ディクショナリで既定のコード マッピングを構成する方法を示す例については、Configure Default Code Mapping in a Shared Dictionaryを参照してください。

関連する例

パラメーター

すべて展開する

Embedded Coder ディクショナリ ウィンドウの右側のペインに次のプロパティが表示されます。

ストレージ クラス

ストレージ クラスの名前。名前はディクショナリ内のストレージ クラスで一意である必要があります。

Simulink で提供される組み込みストレージ クラスとストレージ クラスの例のリストについては、生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。

ストレージ クラスの目的および機能を記述するために使用できるカスタム テキスト。

この パラメーター は読み取り専用です。

ストレージ クラス定義の場所。

モデルと関連付けられているデータにアクセスするための指定。データに直接 ([Direct])、あるいはカスタマイズ可能な関数 get および set を通じて ([Function])、またはポインターを使用して ([Pointer]) アクセスします。詳細については、Access Data Through Functions by Using Storage Classes in Embedded Coder Dictionaryを参照してください。

依存関係

  • このプロパティを Pointer に設定すると、次のようになります。

    • PreserveDimensions プロパティが false に設定されます。生成コードで多次元配列の次元を保持するには、DataAccessDirect または Function に設定します。

  • このプロパティを Function または Pointer に設定すると、次のようになります。

    • DataScopeImported に設定されます。

    • マルチインスタンス プロパティを指定できないことを意味します。

また、このプロパティを Function に設定すると、次のプロパティが有効になります。

  • AccessMode

  • AllowedAccess

  • GetFunctionName

  • SetFunctionName

生成されたコードでデータを定義するか ([Exported]) または外部コードからデータ定義をインポートするか ([Imported]) の指定。組み込みストレージ クラスおよび Simulink などのパッケージ内のストレージ クラスは File などの他のスコープ オプションを使用できます。

依存関係

  • このプロパティを [インポート] に設定した場合:

    • [定義ファイル] が無効になります。ビルド プロセスに外部ソース コード ファイルを含めるには、モデル コンフィギュレーション パラメーターを使用します。例については、データ インターフェイスの構成を参照してください。

    • $N トークンは使用できても、[ヘッダー ファイル]$N.h に設定できないことを意味します。

  • このプロパティを [エクスポート] に設定するには、[ヘッダー ファイル] の値でトークン $N または $R のいずれかを使用しなければなりません。

データを宣言するヘッダー ファイルの名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$N関連付けられたデータ要素の名前
$Gストレージ クラスの名前
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

依存関係

  • [データ スコープ][エクスポート] に設定する場合は、このプロパティの値にトークン $R または $N のいずれかを使用しなければなりません。

  • [データ スコープ][インポート] に設定する場合は、このプロパティの値をトークン $N.h に設定できませんが、$N は使用できます。

データを定義するソース ファイルの名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$N関連付けられたデータ要素の名前
$Gストレージ クラスの名前
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

依存関係

[データ スコープ][インポート] に設定すると、[定義ファイル] が無効になります。ビルド プロセスに外部ソース コード ファイルを含めるには、モデル コンフィギュレーション パラメーターを使用します。例については、データ インターフェイスの構成を参照してください。

[値] または [ポインター] を使用して、関数を通じてモデルと関連付けられているデータにアクセスするためのストレージ クラスの指定。詳細については、Access Data Through Functions by Using Storage Classes in Embedded Coder Dictionaryを参照してください。

依存関係

このプロパティは、[データ アクセス][関数] に設定されている場合にのみ有効です。

データに対する読み取りと書き込み ([Read/Write])、読み取り専用 ([Read Only])、または書き込み専用 ([Write Only]) のアクセスを許可するためのストレージ クラスの指定。

依存関係

このプロパティは、[データ アクセス][関数] に設定されている場合にのみ有効です。

関連付けられたデータを取得する関数 get の名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$N関連付けられたデータ要素の名前 (必須)
$Rルート モデルの名前
$M一意性を確保するマングル テキスト
$Uユーザー トークン テキスト。Identifier Format Controlを参照してください。

依存関係

このプロパティは、[データ アクセス][関数] に設定されている場合にのみ有効です。

変更するデータを取得する関数 set の名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$N関連付けられたデータ要素の名前 (必須)
$Rルート モデルの名前
$M一意性を確保するマングル テキスト
$Uユーザー トークン テキスト。Identifier Format Controlを参照してください。

依存関係

このプロパティは、[データ アクセス][関数] に設定されている場合にのみ有効です。

[単一インスタンス ストレージ] セクションで指定したストレージ設定または [マルチインスタンス ストレージ] セクションで指定したストレージ設定のいずれかを使用するためのストレージ クラスの指定。ストレージ クラスをデータ項目に適用すると、Embedded Coder ディクショナリは、データのタイプとモデル参照階層におけるモデルのコンテキストに応じて、単一インスタンス ストレージ クラスまたはマルチインスタンス ストレージ クラスのどちらであるか判断します。

依存関係

このプロパティを選択すると、[単一インスタンス ストレージ] セクションと [マルチインスタンス ストレージ] セクションが有効になります。プロパティ [ストレージ タイプ][タイプ名]、および [インスタンス名] は、[単一インスタンス ストレージ][マルチインスタンス ストレージ] の両方のセクションに表示されます。

ストレージ クラスを使用するデータを生成されたコード内の構造体に集約するための指定。各データ要素は、構造体のフィールドとしてコードに表示されます。構造体を作成するには、[Structured] を使用します。

依存関係

このプロパティを [Structured] に設定すると、[タイプ名][インスタンス名] が有効になります。

生成コード内の構造体型の名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Nstep など、関連付けられた関数のベース名
$Gストレージ クラスの名前
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。
$M名前の競合を回避するために、必要に応じて挿入される名前マングリング テキスト

依存関係

[ストレージ タイプ][Structured] に設定すると、このプロパティが有効になります。

生成コード内の構造体変数の名前。名前または命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Nstep など、関連付けられた関数のベース名
$Gストレージ クラスの名前
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。
$M名前の競合を回避するために、必要に応じて挿入される名前マングリング テキスト

依存関係

[ストレージ タイプ][Structured] に設定すると、このプロパティが有効になります。

生成コードでデータを初期化することの指定。

  • Auto — 生成されたコードは、パラメーター データを静的に初期化し、信号および状態データを動的に初期化します。

  • Dynamic — 生成されたコードは、データをモデルの初期化エントリポイント関数の一部として初期化します。

  • Static — 生成されたコードは、データに対してメモリを定義して割り当てる同じステートメントでデータを初期化します。代入ステートメントは、.c または .cpp ソース ファイルの上部の関数の外側に表示されます。

  • None — 生成されたコードはデータを初期化しません。

依存関係

  • [Const] を選択した場合、このプロパティは [動的] に設定できません。

  • このプロパティを [動的] に設定すると、[Const] は無効になります。

データを割り当てるメモリ内の場所。[メモリ セクション] タブで Embedded Coder ディクショナリに存在するメモリ セクションとして指定します。メモリ セクションについては、Control Data and Function Placement in Memory by Inserting Pragmasを参照してください。

生成コードで多次元配列の次元を保持するためのストレージ クラスの指定。詳細については、Preserve Dimensions of Multidimensional Arrays in Generated Codeを参照してください。

const 修飾子をデータに適用するための指定。

依存関係

  • このプロパティを選択する場合は、[データの初期化][動的] に設定できません。

  • [データの初期化][動的] に設定すると、このプロパティは無効になります。

volatile 修飾子をデータに適用するための指定。

カスタム修飾子をデータに適用するための指定。たとえば、一部のメモリ アーキテクチャでは、修飾子 far および huge がサポートされます。

このプロパティを使用してキーワード static を適用しないでください。代わりに、組み込みストレージ クラス FileScope を使用します。これはコード マッピング エディターでは適用できません。生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。

モデル パラメーターでのストレージ クラスの使用を許可するかどうかを示す指定。

依存関係

  • [データの初期化][静的] に設定すると、このプロパティが有効になります。

  • [データの初期化][動的] に設定すると、このプロパティは無効になります。

  • このプロパティの値を設定するには、[データの初期化][なし] に設定します。

モデル信号でのストレージ クラスの使用を許可するかどうかを示す指定。

依存関係

  • [データの初期化][動的] に設定すると、このプロパティは有効になります。

  • [データの初期化][静的] に設定すると、このプロパティは無効になります。

  • このプロパティの値を設定するには、[データの初期化][なし] に設定します。

関数カスタマイズ テンプレート

テンプレートの名前。名前はディクショナリ内の関数テンプレートで一意である必要があります。Embedded Coder は、次の表に示される組み込みテンプレートを提供します。

テンプレート説明
ModelFunctionコード マッピング エディターで、初期化、実行、終了、およびリセットのエントリポイント関数に使用します (Configure Default Code Generation for Functionsを参照)。
UtilityFunctionコード マッピング エディターで、共有ユーティリティ関数に使用します (Configure Default Code Generation for Functionsを参照)。

関数テンプレートの目的と機能を記述するために使用できるカスタム テキスト。

この パラメーター は読み取り専用です。

関数テンプレート定義の場所。

  • モデル名 — Simulink モデルで定義されます。

  • ディクショナリ名 — Simulink データ ディクショナリで定義されます (データ ディクショナリとはを参照)。

生成コード内の関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Nstep など、関連付けられた関数のベース名
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。
$C共有ユーティリティ関数。名前の競合を回避するためにチェックサムが挿入されます
$M名前の競合を回避するために、必要に応じて挿入される名前マングリング テキスト

関数を割り当てるメモリ内の場所。[メモリ セクション] タブで Embedded Coder ディクショナリに存在するメモリ セクションとして指定します。メモリ セクションについては、Control Data and Function Placement in Memory by Inserting Pragmasを参照してください。

関数を宣言するヘッダー ファイルの名前。ヘッダーのファイル名で次のトークンを使用できます。

トークン説明
$Rルート モデルの名前
$Nstep など、関連付けられた関数のベース名
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

カスタム ヘッダー ファイルの使用方法の詳細については、Control File Packaging of Generated Entry-Point Functions and Simulink Functionsを参照してください。

関数を定義するソース ファイルの名前。定義ファイル名で次のトークンを使用できます。

トークン説明
$Rルート モデルの名前
$Nstep など、関連付けられた関数のベース名
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

カスタム定義ファイルの使用方法の詳細については、Control File Packaging of Generated Entry-Point Functions and Simulink Functionsを参照してください。

メモリ セクション

メモリ セクションの名前。名前はディクショナリ内のメモリ セクションで一意である必要があります。Embedded Coder は、次の表に示される組み込みメモリ セクションを提供します。

メモリ セクション説明
MemConstストレージ型修飾子 const をデータに適用します。
MemVolatileストレージ型修飾子 volatile をデータに適用します。
MemConstVolatileストレージ型修飾子 const および volatile をデータに適用します。

メモリ セクションの目的と機能を記述するために使用できるカスタム テキスト。

この パラメーター は読み取り専用です。

メモリ セクションの定義の場所。

[ステートメントの前] および [ステートメントの後] で指定したプラグマまたはその他の装飾とともにコード ジェネレーターに含まれるコード コメント。

メモリ セクション内にあるデータまたは関数の定義および宣言の前に挿入される、プラグマなどのコード。

トークン $R を使用して、メモリ セクションを使用するモデルの名前を表すことができます。

[ステートメントを囲む文字][各変数] に設定する場合は、トークン $N を使用して、メモリ セクションを使用する各変数または関数の名前を表すことができます。

メモリ セクション内にあるデータまたは関数の定義および宣言の後に挿入される、プラグマなどのコード。

トークン $R を使用して、メモリ セクションを使用するモデルの名前を表すことができます。

[ステートメントを囲む文字][各変数] に設定する場合は、トークン $N を使用して、メモリ セクションを使用する各変数または関数の名前を表すことができます。

コード ステートメントを挿入する ([ステートメントの前] および [ステートメントの後]) ための指定:

  • メモリ セクションを使用する各変数および関数を囲む形。[各変数] を選択します。

  • 1 回のみ、メモリ セクション全体を囲む形。生成されたコードでは、変数および関数定義を連続するコード ブロックに集約し、ブロックをステートメントで囲みます。[変数のグループ] を選択します。

受信側サービス インターフェイス

R2022b 以降

受信側サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

受信側サービス説明
ReceiverExample1メモリの最適化がデータの鮮度よりも優先されます。サービスは関数の実行開始前に別の関数からデータを読み取ります。
ReceiverExample2データの鮮度がメモリの最適化よりも優先されます。サービスは関数の実行中に別の関数から直ちにデータを読み取ります。
ReceiverExample3このオプションは、コンポーネント コードのパフォーマンスを最大化する場合、または相互排除がコンポーネント モデル設計に固有の場合に使用します。プラットフォーム サービスは、ターゲット実行環境用にプラットフォーム サービスで管理しているメモリを使用して、生成される関数コードから直接データを読み取ります。

ターゲット プラットフォーム サービスとランタイム環境の間での受信側データ転送の処理方法。次のオプションのいずれかとして指定します。

  • Outside Execution — 関数の実行開始前に別の関数からデータを読み取ります。このオプションは、メモリの最適化をデータの鮮度より優先する場合に使用します。

  • During Execution — 関数の実行中に別の関数から直ちにデータを読み取ります。生成された、サービスを呼び出す関数コードは、ローカル バッファーを使用して実行中に値の一貫性を維持する必要があります。このオプションは、データの鮮度をメモリの最適化より優先する場合に使用します。

  • Direct Access — プラットフォーム サービスで管理しているメモリを使用して、生成される関数コードから直接データを読み取ります。このオプションは、コンポーネント コードのパフォーマンスを最大化する場合、または相互排除がコンポーネント モデル設計に固有の場合に使用します。

生成コード内の受信側関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Gサービス名
$N要素名
$X現在の呼び出し可能な関数
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。
$M名前の競合を回避するために挿入される名前マングリング テキスト

依存関係

関数の命名規則を指定するには、[データ通信方法]Outside Execution または During Execution に設定する必要があります。

ストレージ クラス定義。ディクショナリの [ストレージ クラス] セクションにある定義のいずれかとして指定します。

依存関係

ストレージ クラス受信側サービスを指定するには、[データ通信方法]Direct Access に設定する必要があります。

送信側サービス インターフェイス

R2022b 以降

送信側サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

送信側サービス説明
SenderExample1データの鮮度がメモリの最適化よりも優先されます。プラットフォーム サービスは関数の実行中に別の関数から直ちにデータを読み取ります。
SenderExample2メモリの最適化がデータの鮮度よりも優先されます。サービスは関数の実行後に別の関数にデータを送信します。
SenderExample3このオプションは、コンポーネント コードのパフォーマンスを最大化する場合、または相互排除がコンポーネント モデル設計に固有の場合に使用します。プラットフォーム サービスは、ターゲット実行環境用にプラットフォーム サービスで管理しているメモリを使用して、生成される関数コードから直接データを読み取ります。

タスクとランタイム環境の間での送信側データ転送の処理方法。次のオプションのいずれかとして指定します。

  • Outside Execution — 関数の実行開始前に別の関数にデータを送信します。このオプションは、メモリの最適化をデータの鮮度より優先する場合に使用します。

  • During Execution — 関数の実行中に別の関数に直ちにデータを送信します。生成された、サービスを呼び出す関数コードは、ローカル バッファーを使用して実行中に値の一貫性を維持する必要があります。このオプションは、データの鮮度をメモリの最適化より優先する場合に使用します。

  • Direct Access — プラットフォーム サービスで管理しているメモリを使用して、生成される関数コードに直接データを送信します。このオプションは、コンポーネント コードのパフォーマンスを最大化する場合、または相互排除がコンポーネント モデル設計に固有の場合に使用します。

生成コード内の送信側関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Gサービス名
$N要素名
$X現在の呼び出し可能な関数
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。
$M名前の競合を回避するために挿入される名前マングリング テキスト

依存関係

関数の命名規則を指定するには、[データ通信方法]Outside Execution または During Execution に設定する必要があります。

生成コード内の参照による値を送信する送信側関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$Gサービス名
$X現在の呼び出し可能な関数
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

依存関係

関数の命名規則を指定するには、定義をデータ送信側サービスにして、[データ通信方法]Outside Execution または During Execution に設定する必要があります。

ストレージ クラス定義。ディクショナリの [ストレージ クラス] セクションにある定義のいずれかとして指定します。

依存関係

ストレージ クラス受信側サービスを指定するには、[データ通信方法]Direct Access に設定する必要があります。

データ転送サービス インターフェイス

R2022b 以降

データ転送サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

データ転送サービス説明
DataTransferExample1データの鮮度がメモリの最適化よりも優先されます。プラットフォーム サービスは関数の実行中に別の関数から直ちにデータを読み取ります。
DataTransferExample2メモリの最適化がデータの鮮度よりも優先されます。サービスは関数の実行の外で別の関数からデータを送受信します。

タスクとランタイム環境の間でのデータ転送の処理方法。次のオプションのいずれかとして指定します。

  • Outside Execution — 関数の実行開始前に別の関数にデータを通信します。このオプションは、メモリの最適化をデータの鮮度より優先する場合に使用します。

  • During Execution — 関数の実行中に別の関数に直ちにデータを通信します。生成された、サービスを呼び出す関数コードは、ローカル バッファーを使用して実行中に値の一貫性を維持する必要があります。このオプションは、データの鮮度をメモリの最適化より優先する場合に使用します。

生成コード内の受信側関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$N要素名
$X現在の呼び出し可能な関数
$M名前の競合を回避するために挿入される名前マングリング テキスト

生成コード内の送信側関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Rルート モデルの名前
$N要素名
$X現在の呼び出し可能な関数
$M名前の競合を回避するために挿入される名前マングリング テキスト

タイマー サービス

R2022b 以降

タイマー サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

タイマー サービス説明
TimerServiceExample1タイマー サービスは関数の実行の外で実行されます。

タスクとランタイム環境の間でのデータ転送の処理方法。次のオプションのいずれかとして指定します。

  • Outside Execution — 関数の実行開始前に別の関数にデータを通信します。このオプションは、メモリの最適化をデータの鮮度より優先する場合に使用します。

  • During Execution — 関数の実行中に別の関数に直ちにデータを通信します。生成された、サービスを呼び出す関数コードは、ローカル バッファーを使用して実行中に値の一貫性を維持する必要があります。このオプションは、データの鮮度をメモリの最適化より優先する場合に使用します。

生成コード内の時間刻み関数の名前。命名規則として指定します。命名規則には、テキストとトークンの組み合わせが含まれます。有効なトークンを次の表に示します。

トークン説明
$Gサービス名
$X現在の呼び出し可能な関数
$Uユーザー トークン テキスト。Identifier Format Controlの説明に従ってモデルに対して指定します。

依存関係

  • タイマー サービスを複数作成する場合は $G トークンを使用します。

  • [データ通信方法]Outside Execution に設定する場合は $X トークンを使用します。

パラメーター調整インターフェイス

R2022b 以降

パラメーター調整サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

パラメーター調整サービス説明
ParameterTuningExample1パラメーターを調整するためのサービス。

ストレージ クラス定義。ディクショナリの [ストレージ クラス] セクションにある定義のいずれかとして指定します。

パラメーター引数調整インターフェイス

R2022b 以降

パラメーター引数調整サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

パラメーター引数調整サービス説明
ParameterArgumentTuningExample1パラメーター引数を調整するためのサービス。

ストレージ クラス定義。ディクショナリの [ストレージ クラス] セクションにある定義のいずれかとして指定します。

測定サービス インターフェイス

R2022b 以降

測定サービスの名前。Embedded Coder には、例として次の表に示すサービスが用意されています。

測定サービス説明
MeasurementExample1信号を測定するためのサービス。

ストレージ クラス定義。ディクショナリの [ストレージ クラス] セクションにある定義のいずれかとして指定します。

制限

  • Embedded Coder ディクショナリで作成するストレージ クラスまたは関数カスタマイズ テンプレートでは、パッケージから読み込むメモリ セクションを使用できません (パッケージ内のコード生成定義の参照を参照)。Embedded Coder ディクショナリで定義されたメモリ セクションを使用します。

  • [関数] データ アクセスが設定された Embedded Coder ディクショナリで作成するストレージ クラスは、データ ストア、パラメーター引数調整インターフェイス、測定インターフェイスのストレージ クラスでサポートされません。

  • .mdl モデル ファイルでコード生成定義を作成できません。

データ ディクショナリ (.sldd ファイル) の Embedded Coder ディクショナリ内のコード生成定義に関する追加の制限については、Deploy Code Generation Definitionsを参照してください。

バージョン履歴

R2018a で導入

すべて展開する