このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
生成されたコードでのデータ表示を制御するストレージ クラスの選択
"ストレージ クラス" は、パラメーター、信号、状態などのデータに適用するコード生成設定です。コードの構成時に、ストレージ クラスを使用して生成コード内でのデータ要素の外観および配置を制御したり、最適化によってそのデータ要素のストレージが削除されることを防ぎます。
モデル データについては、コード マッピング エディターまたはコード マッピング 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 | 生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。 |
このストレージ クラスを使用する例については、Compile Code Conditionally for Variations of Component Represented Using Variant Blockを参照してください。
Const、Volatile、および ConstVolatile
これらのストレージ クラスを使用して、グローバル変数の定義と宣言を const
、volatile
、または const
および volatile
型修飾子を使用して生成します。
これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。
プロパティ | 説明 |
---|---|
Identifier | 生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。 |
HeaderFile | データ要素および外部コードによって読み取られるグローバル データの宣言を含むソース ヘッダー ファイル。 |
DefinitionFile | データ要素および外部コードによって読み取られるグローバル データの定義を含むソース定義ファイル。 |
Owner | データを使用する複数のコンポーネントのいずれかのために生成されたコードで定義されているグローバル データのオーナー。 |
PreserveDimensions | モデル コンフィギュレーション パラメーター [配列のレイアウト] が |
このストレージ クラスを使用する例については、型修飾子を参照してください。
Define、ImportedDefine
Define
ストレージ クラスを使用して、#define myParam 5
などのマクロ (#define
命令) を生成します。
ImportedDefine
を使用して、外部コードのヘッダー ファイルで定義されるマクロ (#define
命令) を使用するコードを生成します。例については、マクロ定義 (#define)を参照してください。
これらのストレージ クラスを使用するときに、以下のプロパティも設定できます。
プロパティ | 説明 |
---|---|
Identifier | 生成されたコード内のデータ要素に名前を付けるためにコード ジェネレーターが使用する識別文字列。 |
HeaderFile | データ要素および外部コードによって読み取られるグローバル データの宣言を含むソース ヘッダー ファイル。 |
このストレージ クラスを使用するデータ要素は、コード記述子 API や生成された ARXML 記述には表示されません。コード記述子 API の詳細については、参照してください。ARXML 記述の生成については、AUTOSAR C コードおよび XML 記述の生成 (AUTOSAR Blockset)を参照してください。
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 | 関数 |
GetFunction | 生成されたコード内で、指定された関数 get の呼び出しとして表示されるデータ要素。 |
SetFunction | 生成されたコード内で、指定された関数 set の呼び出しとして表示されるデータ要素。 |
PreserveDimensions | モデル コンフィギュレーション パラメーター [配列のレイアウト] が |
このストレージ クラスを使用する例については、Access Data Through Functions with Storage Class GetSetを参照してください。
ImportFromFile
このストレージ クラスを使用して、外部コードによって定義されているグローバル変数に対して読み書きを行うコードを生成します。ImportFromFile
は ExportToFile
に類似していますが、生成されたコードは変数を定義しません。
このストレージ クラスを使用するときに、以下のプロパティも設定できます。
プロパティ | 説明 |
---|---|
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
を複数のファイルで使用されているデータに適用することはできません。Simulink Function ブロックに入力される信号にストレージ クラス
Reusable
は適用できません。