カスタム データ型のファイル配置の制御
既定では、データ型オブジェクト (Simulink.AliasType
や Simulink.Bus
など) とカスタムの列挙型を使用して信号やブロック パラメーターのデータ型を指定すると、モデルから生成されたコードに型の定義 (たとえば typedef
ステートメントなど) が含まれます。他の既存のコードとの生成コードの統合を簡単にしたり、生成コードをモジュール化したりするために、オブジェクトと列挙型のプロパティを調整して型定義のファイル配置を制御できます。
データ スコープとヘッダー ファイル
生成コードにおけるカスタム型定義のファイル配置を制御するには、データ型オブジェクトの DataScope
プロパティと HeaderFile
プロパティを次の表に従って設定します。MATLAB® ファイルで定義する列挙型についても同様に、getDataScope
メソッドと getHeaderFile
メソッドの戻り引数を同じように設定します。
はカスタム データ型の名前です。typename
はヘッダー ファイルの名前です。filename
はモデルの名前です。model
目的 | DataScope の指定内容 | HeaderFile の指定内容 |
---|---|---|
に型定義をエクスポートする | Auto | 空 |
作成したヘッダー ファイル から型定義をインポートする | Auto または Imported | (必要な場合は拡張子 .h を含める) |
生成されたヘッダー ファイル に型定義をエクスポートする | Exported | または
|
生成されたヘッダー ファイル に型定義をエクスポートする | Exported | 空 |
データ型定義をインポートすると (たとえば DataScope
を Imported
に設定)、生成されるモデル コードにおいて、型定義の代わりにヘッダー ファイルの #include
命令が作成されます。定義を含むヘッダー ファイルを提供します。リンカー エラーを回避するには、インポートしたヘッダー ファイルの先頭に #pragma once
などのインクルード ガードを追加する必要があります。
データ型置換に関する考慮事項
[カスタム データ型名を指定] コンフィギュレーション パラメーターを使用して、生成コード内の Simulink® Coder™ の組み込みデータ型を独自のデータ型に置換した場合 (モデル コンフィギュレーション パラメーター: コード生成のデータ型置換を参照)、
typedef
ステートメントおよび#include
命令は
にではなくmodel
_types.hrtwtypes.h
に配置されます。Simulink.AliasType
オブジェクトまたはSimulink.NumericType
オブジェクトをデータ型置換で使用する場合、オブジェクトのDataScope
プロパティをExported
に設定できません。そのため、コード ジェネレーターで対応するtypedef
ステートメントを生成する場合は、ステートメントのファイル配置を制御できません。ただし、DataScope
をImported
に設定することで、外部コードで提供されるtypedef
ステートメントを再利用するようにコードを構成することは可能です。回避策として、データ型オブジェクトをデータ型置換として使用する代わりに、オブジェクトを使用してモデル内の個々のデータ項目のデータ型を設定します。多数のデータ項目の構成には、モデル データ エディターを使用してデータ型の伝播や継承を利用できます。詳細については、Specify Custom Names Using Data Replacement Type Paneを参照してください。
複素数データ型の定義のインポート
Simulink.AliasType
オブジェクトでは複素数データ (i
) を使用できます。この場合、型定義を外部コードからインポートするように生成コードを構成するには (たとえば DataScope
プロパティを Imported
に設定)、コードに 2 つの補完的な typedef
ステートメントが必要になります。
外部ヘッダー ファイル myAliasTypes.h
で、データ型 IAT_int32
を 32 ビット整数のエイリアスとして定義するとします。IAT_int32
と cIAT_int32
の 2 つの型をファイルで定義しなければなりません。
#ifndef myAliasTypes_H_ #define myAliasTypes_H_ #include "rtwtypes.h" typedef int32_T IAT_int32; typedef cint32_T cIAT_int32; #endif
Simulink.AliasType
オブジェクトは 2 つ作成する必要はありません。この例では、オブジェクト IAT_int32
を 1 つだけ作成します。これにより、生成コードで IAT_int32
と cIAT_int32
の両方を使用して複素数データ (変数) が生成されます。
マクロ ガード
生成されたヘッダー ファイルに 1 つ以上のデータ型定義をエクスポートすると、ファイルには RTW_HEADER_
の形式のファイルレベルのマクロ ガードが含まれます。 filename
_h
次のプロパティをもつ複数の Simulink.AliasType
オブジェクト mySingleAlias
、myDoubleAlias
、および myIntAlias
を使用するとします。
DataScope
をExported
に設定HeaderFile
をmyTypes.h
に設定
コードを生成すると、ガードされたファイル myTypes.h
に typedef
ステートメントが含まれます。
#ifndef RTW_HEADER_myTypes_h_ #define RTW_HEADER_myTypes_h_ #include "rtwtypes.h" typedef real_T myDoubleAlias; typedef real32_T mySingleAlias; typedef int16_T myIntAlias; #endif
にデータ型定義をエクスポートすると、ファイルにはそれぞれの model
_types.htypedef
ステートメントに対する _DEFINED_TYPEDEF_FOR_
の形式のマクロ ガードが含まれます。次のプロパティをもつ typename
_Simulink.AliasType
オブジェクト mySingleAlias
を使用するとします。
DataScope
をAuto
に設定HeaderFile
の指定なし
コードを生成すると、ファイル
にガードされた model
_types.htypedef
ステートメントが含まれます。
#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_ #define _DEFINED_TYPEDEF_FOR_mySingleAlias_ typedef real32_T mySingleAlias; #endif
参考
Simulink.AliasType
| Simulink.NumericType
| Simulink.Bus