Main Content

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

生成されたコードでのデータ表示を制御するストレージ クラスの選択

"ストレージ クラス" は、パラメーター、信号、状態などのデータに適用するコード生成設定です。コードの構成時に、ストレージ クラスを使用して生成コード内でのデータ要素の外観および配置を制御したり、最適化によってそのデータ要素のストレージが削除されることを防ぎます。

モデル データについては、コード マッピング エディターまたはコード マッピング API を使用して、ストレージ クラスをモデル データ要素に直接適用できます。エディターまたは API のいずれかを使用して、データのカテゴリに対して既定のストレージ クラスを適用してから、必要に応じて個々のデータ要素の設定をオーバーライドします。

外部データについては、モデル エクスプローラーを使用してストレージ クラスをデータ オブジェクトに適用するか、get_param および set_param などの関数を使用してプログラムによって適用します。

要素または要素カテゴリのストレージ クラスを指定したら、ヘッダー ファイル、定義ファイル、メモリ セクションなど、そのストレージ クラスのプロパティを設定できます。

ストレージ クラス プロパティ

ストレージ クラスのプロパティ設定によって、コード ジェネレーターが生成コード内でデータを表す方法と場所を定義します。ストレージ クラスのユーザーが設定できるプロパティは、ストレージ クラスによって異なります。ほとんどの個別要素に対して、ユーザーはコード内のデータ要素に名前を付けるために識別子を設定できます。事前定義されたストレージ クラス用にユーザーが設定できるプロパティを特定するには、特定のストレージ クラスに関する以下の情報を確認してください。

カスタム ストレージ クラス デザイナーを使用してストレージ クラスを作成する場合は、ストレージ クラスのユーザーが追加設定を指定できるかどうかを選択できます。ストレージ クラスのユーザーによるプロパティ値の指定を許可を参照してください。

既定のストレージ クラス

既定では、個々のデータ要素のストレージ クラスは Auto です。この既定値を使用すると、ストレージ クラスの選択と適用をコード ジェネレーターで処理することになります。この場合、データ要素はコード生成の最適化の対象となり、コードから要素が削除されたり、要素の表示が変更されたりする場合があります。最適化によってデータ要素が削除されない場合、その要素は生成されたコード内で標準のデータ構造体のフィールドとして表示されます。

コード マッピング エディターまたはコード マッピング API の使用時に、最適化によって削除されないストレージ クラス Auto を使用して構成されたデータ要素は、対応するデータ カテゴリの既定のコード生成設定を取得します。データ要素のカテゴリに対してコードの構成を指定しない場合、ストレージ クラスは Default になります。データ要素カテゴリでこのストレージ クラスが使用されている場合、そのカテゴリに含まれるデータ要素は生成されたコード内で標準データ構造体のフィールドとして表示されます。

組み込みおよび事前定義済みストレージ クラス

最適化によってデータ要素のストレージが削除されることを防ぐには、コード生成の要件に基づいて要素のストレージ クラスを選択します。使用可能なストレージ クラスには、組み込みストレージ クラスと Simulink パッケージの事前定義済みストレージ クラスが含まれます。また、Embedded Coder ディクショナリで定義されているその他のプロジェクト固有のストレージ クラスが含まれる場合もあります。リストされているストレージ クラスでは満たされない特別な要件があり、ERT ベースのターゲット向けのコードを生成している場合、新しいストレージ クラスを定義して使用することができます。Define Service Interfaces, Storage Classes, Memory Sections, and Function Templates for Software Architectureおよびカスタム ストレージ クラス デザイナーを使用したストレージ クラスの作成を参照してください。

Simulink® Coder™ では、事前定義された以下の組み込みストレージ クラスから選択できます。

要件ストレージ クラス
より効率的なコードを生成するように、最適化を有効にする。Auto (個別データ要素)
最適化できないデータ要素の場合、データを標準のデータ構造体のフィールドとして表す。既定値 (既定のマッピング)
最適化によってデータ要素のストレージが削除されることを防ぐ。Model Default (個別のマッピング)
スタンドアロンのグローバル変数からデータにアクセスする。生成されたコードには変数の宣言と定義が含まれます。ExportedGlobal
スタンドアロンのグローバル変数からデータにアクセスする。生成されたコードには変数の宣言が含まれます。外部コードによって定義が提供されます。ImportedExtern、ImportedExternPointer

Embedded Coder® をお持ちの場合、Simulink パッケージで使用できる、以下のような追加の事前定義済みストレージ クラスから選択できます。

要件ストレージ クラス
最適化によってデータ要素のストレージが削除されることを防ぐ。Dictionary Default (既定のマッピング)
スタンドアロンの変数を生成する。
構造体のフィールドとして変数を生成する。
コードのコンパイル中に修正される値をもつ変数を生成する。
関数呼び出しを通してアクセスする変数を生成する。GetSet
単一インスタンス データに対しては変数、マルチインスタンス データに対しては構造体を生成する。MultiInstance

これらのストレージ クラスは Embedded Coder ディクショナリに追加できるストレージ クラスの例です。これらの例は、クイック スタート ツールを使用してコード生成用のモデルを準備する際に定義され、利用可能になります。

要件ストレージ クラス

パラメーター データおよび信号または状態データを含むグローバル構造体を生成する。

ParamStruct、SignalStruct

メモ

ベース ワークスペースまたはデータ ディクショナリで非自動ストレージ クラスを使用して定義された信号オブジェクトは、ERT ベースのシステム ターゲット ファイルとサービス コード インターフェイスで構成されたモデルではサポートされません。

Auto

このストレージ クラスを選択すると、コード ジェネレーターは、生成されたコード内でのデータの表現方法を処理し、最適化がデータ要素に作用するようにして、より効率的なコードを生成できるようになります。

Auto はモデル内の各データ要素の既定のストレージ クラスです。データ要素はコード生成の最適化の対象となり、コードから要素が消去されたり、要素の表示が変更されたりする場合があります。[コンフィギュレーション パラメーター][コード生成][最適化] ペインでの最適化など、これらの最適化の詳細については、生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。

最適化によって、ほとんどのブロック状態など、一部のデータはコードから削除されません。残りのデータは、コード マッピング エディターの [Data Defaults] タブで指定する既定のストレージ クラスを取得します (Configure Default Code Generation for Dataを参照)。データ要素を削除できない場合、コード内の要素の名前は、モデル コンフィギュレーション パラメーターを使用して指定する命名規則に基づいています。Identifier Format Controlを参照してください。Embedded Coder が必要です。

既定値

コード マッピング エディターの [Data Defaults] タブでは、Default は各データ要素カテゴリ用の既定のストレージ クラス設定です。カテゴリのストレージ クラス設定をこの値のままにした場合、コード生成最適化の対象でないデータ要素は標準データ構造体のフィールドとして表示されます。生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。

Model Default

コード生成用に個別のデータ要素を設定するときに、Model Default ストレージ クラスを使用して、最適化によってデータ要素のストレージが削除されることを防ぎます。生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。このストレージ クラス設定では、データ要素は、コード マッピング エディターの [Data Defaults] タブで対応するデータ カテゴリに対して指定した既定のストレージ クラスを取得します。コード内のデータ要素の名前は、モデル内での名前と同じです。

Dictionary Default

Embedded Coder では、データのカテゴリに対して既定のコード定義を設定するコーダー ディクショナリが含まれるデータ ディクショナリにモデルをリンクする場合、コード マッピング エディターを使用してディクショナリの既定の設定を適用できます。[Data Defaults] タブで、カテゴリを選択し、ストレージ クラスを Dictionary Default に設定します。コーダー ディクショナリで既定のコード マッピングを設定する方法の詳細については、Configure Default Code Mapping in a Shared Dictionaryを参照してください。

ExportedGlobal

この組み込みストレージ クラスを使用して、グローバル変数の定義と宣言を生成します。既定では、変数の名前はデータ要素の名前です。コードでは、生成されたファイル model.h で変数が宣言されます。これは外部コードにインクルード (#include) できます。このグローバル変数は、コード ジェネレーターによって生成コードから最適化されることはありません。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

このストレージ クラスを使用する例については、C Data Code Interface Configuration for Model Interface Elementsを参照してください。

ImportedExtern、ImportedExternPointer

モデル内のデータ要素が、外部コードによって定義されたグローバル変数を表すようにするには、組み込みストレージ クラス ImportedExtern を使用します。生成されたアルゴリズム コードでは変数を定義せずに使用します。

外部コードで定義されたグローバル変数に対して読み取りと書き込みを実行するコードを生成します。生成されたコードでは、生成されたファイル model_private.h 内で変数を宣言し、モデルのエントリポイント関数が変数に対して読み取りと書き込みをできるようにします。

たとえば、ストレージ クラス ImportedExtern を信号線、ブロックの状態、パラメーター オブジェクトに適用できます。インポートしたデータには以下が適用されます。

  • 生成されたコードはパラメーター データを初期化しない。インポートしたパラメーター データはコードで初期化しなければなりません。

  • 生成した初期化関数は一部の信号と状態データを動的に初期化する。生成されたコードによって割り当てられるデータとは異なり、コードは、インポートした信号または状態データを保存されたゼロの値に初期化しません。その代わり、コードはデータを Simulink で指定した実際の非ゼロ値にすぐに初期化します。

    メモ

    Initialize Function ブロックで指定したゼロ値にインポートされたスコープが含まれている場合でも、これらのゼロ値はコード ジェネレーターで初期化されます。

外部コードでデータ要素を定義し、そのデータにアクセスするためのポインターを提供する場合は、ImportedExternPointer を使用します。生成されたコードは、そのポインターに対して読み書きを行います。生成されたコードでは生成されたファイル model_private.h 内で変数を宣言し、ポインターを逆参照してデータに対する読み取りと書き込みを行います。

これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

ビットフィールド

このストレージ クラスを使用して、boolean、固定小数点、整数のデータを名前付きビット フィールドに保存する構造体を生成します。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

StructName生成されたコード内でのデータ要素の構造体の名前。

このストレージ クラスを使用する例については、ビットフィールドを参照してください。

CompilerFlag

このストレージ クラスを使用して、コンパイラ フラグまたはオプションを使用して定義されたプリプロセッサの条件をサポートします。

Embedded Coder を使用して生成コードをビルドする場合、コンパイラ オプションを指定するには、モデル コンフィギュレーション パラメーター [コンフィギュレーション パラメーター][コード生成][カスタム コード][コード情報][定義] を使用できます。[コード生成] ペイン: カスタム コード: 追加のビルド情報: 定義を参照してください。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

このストレージ クラスを使用する例については、を参照してください。

Const、Volatile、および ConstVolatile

これらのストレージ クラスを使用して、グローバル変数の定義と宣言を constvolatile、または const および volatile 型修飾子を使用して生成します。

これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

HeaderFile

データ要素および外部コードによって読み取られるグローバル データの宣言を含むソース ヘッダー ファイル。

DefinitionFile

データ要素および外部コードによって読み取られるグローバル データの定義を含むソース定義ファイル。

Owner

データを使用する複数のコンポーネントのいずれかのために生成されたコードで定義されているグローバル データのオーナー。

PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

このストレージ クラスを使用する例については、型修飾子を参照してください。

Define、ImportedDefine

Define ストレージ クラスを使用して、#define myParam 5 などのマクロ (#define 命令) を生成します。

ImportedDefine を使用して、外部コードのヘッダー ファイルで定義されるマクロ (#define 命令) を使用するコードを生成します。例については、マクロ定義 (#define)を参照してください。

これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

HeaderFile

データ要素および外部コードによって読み取られるグローバル データの宣言を含むソース ヘッダー ファイル。

このストレージ クラスを使用する例については、マクロ定義 (#define)を参照してください。

ExportToFile

外部ファイルに対するグローバル変数の定義と宣言を生成します。変数を定義して宣言するファイルの名前と配置を指定できます。Control Placement of Global Data Definitions and Declarations in Generated Filesを参照してください。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

HeaderFile

データ要素および外部コードによって読み取られるグローバル データの宣言をコード ジェネレーターが配置するソース ヘッダー ファイル。

DefinitionFile

データ要素および外部コードによって読み取られるグローバル データの定義をコード ジェネレーターが配置するソース定義ファイル。

コード ジェネレーターはこの設定を単一インスタンスのモデルにのみ適用します。データ定義は親レベルで処理されるため、この設定は再利用可能なマルチインスタンスのモデルで無視されます。

Owner

コード ジェネレーターが、階層の最上位レベル コンポーネントに配置する代わりに、グローバル データ定義を配置するモデルの階層構造内のコンポーネント。モデル コンフィギュレーション パラメーター [データ定義の配置にデータ オブジェクトからオーナーを使用する] を設定する必要があります。

PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

このストレージ クラスを使用する例については、パラメーター データの定義、初期化および宣言を参照してください。

FileScope

このストレージ クラスを使用して、static 型修飾子をもつグローバル変数の定義と宣言を生成します。生成されたコードで、変数のスコープは現在のファイル (通常は model.c) に制限されます。

モデルの参照階層で、参照モデルが、ベース ワークスペースまたはデータ ディクショナリで作成したパラメーター オブジェクト (Simulink.Parameter など) を使用する場合、FileScope をオブジェクトに適用できません。回避策として、パラメーター オブジェクトを参照モデルのモデル ワークスペースに移動します。これで、FileScope を使用できます。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

GetSet

このストレージ クラスを使用して、カスタムのアクセサー関数を呼び出してデータを処理するコードを生成します。外部コードでデータを定義し、関数定義を提供します。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

HeaderFile

関数 get と関数 set の宣言を含むソース ヘッダー ファイル。

GetFunction生成されたコード内で、指定された関数 get の呼び出しとして表示されるデータ要素。
SetFunction生成されたコード内で、指定された関数 set の呼び出しとして表示されるデータ要素。
PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

このストレージ クラスを使用する例については、Access Data Through Functions with Storage Class GetSetを参照してください。

ImportFromFile

このストレージ クラスを使用して、外部コードによって定義されているグローバル変数に対して読み書きを行うコードを生成します。ImportFromFileExportToFile に類似していますが、生成されたコードは変数を定義しません。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

HeaderFile

データ要素および外部コードによって読み取られるグローバル データの宣言を含むソース ヘッダー ファイル。リンカー エラーを回避するには、ヘッダー ファイルの先頭にインクルード ガードを含める必要があります。

PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

このストレージ クラスを使用する例については、Integrate External Application Code with Code Generated from PID Controllerを参照してください。

Localizable

可能であれば、ローカル変数を使用して、信号に対するグローバル ストレージの使用を最小限に抑えます。

  • 変数が 1 つの関数で使用されている場合、その変数はその関数に対してローカルです。

  • 変数が 1 つのファイルで使用されている場合、その変数はそのファイルに対してローカルです。

  • 変数が 1 つを超える関数またはファイルで使用されている場合、その変数はグローバルです。

ローカル変数を生成すると、コード ジェネレーターによって変数が生成コードから削除されることはありません。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

PreserveDimensions

モデル コンフィギュレーション パラメーター [配列のレイアウト][行優先] に設定されている場合、生成されたコード内で多次元配列として表されるデータ要素の次元を保持するかどうかを示すフラグ。

このストレージ クラスを使用する例については、Generate Local Variables with Localizable Storage Classを参照してください。

Reusable

このストレージ クラスを使用して、モデル内の独立した複数の信号に対して同じ変数を再利用します。コード ジェネレーターは、単一の再利用されるグローバル変数にデータ パスの中間計算 (一連の接続されたブロック) を保存します。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

このストレージ クラスを使用する例については、Specify Buffer Reuse for Signals in a Pathを参照してください。

struct

このストレージ クラスを使用して、指定可能な名前をもつグローバル構造体を生成します。

このストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

StructName生成されたコード内でのデータ要素の構造体の名前。

このストレージ クラスを使用する例については、Struct ストレージ クラスを使用してパラメーター データを構造体に整理するおよび信号の構造体を参照してください。

MultiInstance

単一インスタンス データに対しては構造化されていない変数、マルチインスタンス データに対しては構造体を生成するには、このストレージ クラスを使用します。このストレージ クラスをデータ項目に適用すると、Embedded Coder ディクショナリはそれが単一インスタンス ストレージ クラスまたはマルチインスタンス ストレージ クラスであるかを決定します。ディクショナリは、データのタイプとモデル参照階層におけるモデルのコンテキストによってクラスのタイプを決定します。このストレージ クラスを複製して、編集可能なコピーを作成できます。

このストレージ クラスを個別のデータ要素に適用すると、[識別子] プロパティも設定できます。[識別子] プロパティは、生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列です。

このストレージ クラスを使用する例については、モデルの階層構造の異なるコンテキストに対応する柔軟なストレージ クラスを参照してください。

ParamStruct、SignalStruct

これらのストレージ クラスを使用して、パラメーターと信号または状態データを含むグローバル構造体をそれぞれ生成します。コンポーネント (参照モデルまたは Atomic Subsystem) の階層で、これらのストレージ クラスを使用して対応する構造体の階層を作成できます。これらのストレージ クラスがコード マッピング エディターに表示されるのは、クイック スタート ツールを使用してコード生成用のモデルを準備した後になります。

これらのストレージ クラスは、モデルが所有するデータに対してのみ使用可能です。

これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。

プロパティ説明
Identifier

生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。

ストレージ クラスの制限

  • コード マッピング エディター (Embedded Coder) またはコード マッピング API でストレージ クラスを使用する場合、いくつかの制限が適用されます。Limitationsを参照してください。

  • データ オブジェクトでは、Embedded Coder ストレージ クラスとマルチワード データ型を使用できません。

  • 参照モデルを使用するモデルの Embedded Coder ストレージ クラスの場合は、次のようになります。

    • グループ化されたストレージ クラス (Struct または Bitfield など) を複数のデータ項目に適用する場合、ストレージ クラス [データ スコープ] プロパティを [Imported] に設定しなければならず、外部ヘッダー ファイルでデータ宣言を指定しなければなりません。グループ化されたストレージ クラスでは、生成されたコードで単一の変数を使用して、複数のデータ オブジェクトを表します。

    • パラメーター オブジェクトがベース ワークスペースまたはデータ ディクショナリ内に存在し、参照モデルがそのオブジェクトを使用する場合、ストレージ クラス FileScope を適用できません。このストレージ クラスをパラメーター オブジェクトに適用するには、オブジェクトを参照モデルのモデル ワークスペースに移動します。

  • ストレージ クラス FileScope は、データ交換インターフェイス (C API、エクスターナル モード、または ASAP2) または MAT ファイル ロギングで使用されるデータ項目に適用できません。ファイルスコープのデータには外部からアクセスできません。

  • ストレージ クラス FileScope を複数のファイルで使用されているデータに適用することはできません。

関連するトピック