Main Content

カスタム データ型の共有ユーティリティ コードの生成

既定では、モデルでカスタム データ型 (Simulink.AliasType オブジェクトまたは列挙型クラス) が使用される場合、コード ジェネレーターは対応する型定義 (typedef) を model_types.h ファイルに配置します。複数のモデルからコードを生成する場合、各モデルは型定義を複製します。これらの重複した定義のため、生成されたコード本体を一体としてコンパイルすることができない場合があります。

ただし、単一の型定義が _sharedutils フォルダーのヘッダー ファイルに配置されるようコード ジェネレーターを構成できます。この場合、モデルからコードを生成すると、型定義が _sharedutils フォルダーに既に存在する場合、コード ジェネレーターは定義を複製せず、インクルード (#include) によって定義を再利用します。

このメカニズムにより、以下を共有できます。

  • クラス Simulink.AliasTypeSimulink.Bus、および Simulink.NumericType からインスタンス化する Simulink® データ型オブジェクトこれらのオブジェクトの作成と使用の基本的な情報については、Manage Replacement of Simulink Data Types in Generated CodeSimulink.Bus を参照してください。

  • スクリプト ファイルに enum クラスを作成するか、関数 Simulink.defineIntEnumType を使用するなどして、定義する列挙型。Simulink での列挙型の定義の基本的な情報については、Simulink モデルでの列挙型データの使用を参照してください。

複数のモデルでカスタム データ型を共有するには、次を行います。

  1. データ型を定義します。たとえば、Simulink.AliasType オブジェクトを作成します。

  2. データ スコープとヘッダー ファイルのプロパティを、共有を有効にする特定の値に設定します。

    データ型オブジェクトでは、DataScope プロパティを 'Exported' に設定し、オプションで、HeaderFile プロパティによりヘッダー ファイル名を指定します。

    スクリプト ファイルで enum クラスとして定義した列挙型の場合は、getDataScope メソッド (戻り値 'Exported' を使用) を実装し、オプションで getHeaderFile メソッドを実装します。

    関数 Simulink.defineIntEnumType を使用して定義した列挙型の場合は、ペアの引数 'DataScope''Exported' に設定し、オプションでペア引数 'HeaderFile' を指定します。

  3. モデルでデータ型を使用します。

  4. 各モデルからコードを生成する前に、モデル コンフィギュレーション パラメーター [共有コードの配置][共有場所] に設定します。

  5. モデルからコードを生成します。

    メモ

    カスタム データ型の定義が _sharedutils フォルダーのヘッダー ファイルに表示されるよう構成できます。モデルのビルドで _sharedutils フォルダーに生成された共有ユーティリティ関数では、カスタム データ型名は使用されません。各モデルのコード フォルダーにあるモデル コードのみカスタム データ型名を使用します。

関連するトピック