メインコンテンツ

MATLAB コードからのコード生成用のストレージ クラス

Embedded Coder® のライセンスを所有している場合、ストレージ クラスを使用して、C/C++ コードから生成される C/C++ コード内のグローバル変数の宣言と定義を制御できます。

コード生成のコンテキストにおいては、"ストレージ クラス" は生成コード内の変数の宣言と定義を決定する仕様です。コード生成のストレージ クラスという用語は、C 言語の用語 "ストレージ クラス指定子" と同じものではありません。

ストレージ クラスは生成されたコードを外部コードと統合するのに役立ちます。生成された変数を外部コードで認識されるようにすることができます。また、外部コードで宣言された変数を生成コードで認識されるようにすることもできます。MATLAB® コードからのコード生成の場合、グローバル変数に対してのみストレージ クラスを使用できます。ストレージ クラスによって以下が決まります。

  • グローバル変数の宣言と定義のファイルの配置。

  • グローバル変数を外部コードからインポートするか、外部コードで使用するためにエクスポートするか。

ストレージ クラスをグローバル変数に代入するには、MATLAB コードで coder.storageClass 関数を使用します。C/C++ ライブラリまたは実行可能ファイルの生成に Embedded Coder プロジェクトまたは構成オブジェクトを使用する場合のみ、コード ジェネレーターで coder.storageClass の呼び出しが認識されます。

coder.storageClass の構文は次のようになります。

coder.storageClass(global_name, storage_class)

global_name はグローバル変数の名前です。文字ベクトルとして指定します。global_name はコンパイル時の定数でなければなりません。

storage_class は次の値のいずれかになります。

ストレージ クラス説明
'ExportedGlobal'
  • C ファイル entry_point_name.cVariable Definitions セクションで変数を定義します。

  • ヘッダー ファイル entry_point_name.hVariable Declarations セクションで extern として変数を宣言します。

  • 関数 entry_point_name_initialize.h で変数を初期化します。

'ExportedDefine'

ヘッダー ファイル entry_point_name.hExported data define セクションで #define 命令を使用して変数を宣言します。

'ImportedExtern'

ヘッダー ファイル entry_point_name_data.hVariable Declarations セクションで extern として変数を宣言します。外部コードで変数の定義を提供しなければなりません。

'ImportedExternPointer'

ヘッダー ファイル entry_point_name_data.hVariable Declarations セクションで extern ポインターとして変数を宣言します。外部コードで有効なポインター変数を定義しなければなりません。

ストレージ クラスには次の要件と制限があります。

  • グローバル変数へのストレージ クラスの代入は、グローバル変数を宣言する関数で行います。ストレージ クラスを複数の関数で代入する必要はありません。

  • グローバル変数にストレージ クラスを代入した後に、そのグローバル変数に別のストレージ クラスを代入することはできません。

  • 定数のグローバル変数にストレージ クラスを代入することはできません。

  • ExportedDefine ストレージ クラスをもつグローバル変数は、スカラーでなければなりませんが、複素数またはマルチワードのスカラーであってはなりません。グローバル変数は読み取り専用でなければならず、コードで書き込むことはできません。

グローバル変数にストレージ クラスを代入しない場合、宣言の場所を除き、変数は 'ExportedGlobal' ストレージ クラスの場合と同じように動作します。ストレージ クラスが 'ExportedGlobal' の場合、ファイル entry_point_name.h でグローバル変数が宣言されます。グローバル変数にストレージ クラスがない場合は、ファイル entry_point_name_data.h で変数が宣言されます。

参考

トピック