メインコンテンツ

生成コードでのバス要素の次元の保持

既定では、多次元のモデル データについて、生成コードには 1 次元配列が含まれます。[コンフィギュレーション パラメーター] ダイアログ ボックスで配列のレイアウトパラメーターが Row-major に設定されている場合に、生成コードで多次元配列の次元を保持することができます。Preserve Dimensions of Multidimensional Arrays in Generated Codeを参照してください。

Embedded Coder® ディクショナリおよびコード マッピング エディターでストレージ クラスを構成することで、ルートレベルの Inport と Outport、パラメーター、信号、状態、ルックアップ テーブル、データ ストアの次元を生成コードで保持することができます。ストレージ クラスに対して構成する [配列の次元を保持] プロパティは、モデルのデータ要素に適用できます。バス オブジェクトは状態や信号などの複数のデータ要素間で通常は共有されるグローバルなタイプであるため、ストレージ クラスのプロパティを使用してバス オブジェクトのバス要素の次元を保持することはできません。

多次元バス要素を含むバス オブジェクトの次元を保持するには、型エディターで [要素の次元を保持] プロパティを使用します。バス オブジェクトの次元を保持できるのは ERT モデルの場合のみです。

モデル例を開く

1. モデル PreserveBusDims を開きます。

PreserveBusDims;

2. Embedded Coder アプリを開きます。

3. [コンフィギュレーション パラメーター] ダイアログ ボックスで、パラメーター [配列のレイアウト]Row-major に設定されていることを確認します。

バス要素の構成

このモデルには、ベース ワークスペースに次の Simulink.Bus オブジェクトが含まれています。

  • ImperialSpecs

  • MetricSpecs

1. Simulink® ツールストリップの [モデル化] タブの [設計] ギャラリーで [型エディター] を選択します。

2. Type Editor[ビュー]All に設定します。次に、ImperialSpecs の行で PreserveElementDimensions 列のチェック ボックスをオンにします。このプロパティを選択すると、バス オブジェクト内のすべての要素の次元を保持するように構成されます。

あるいは、MATLAB コマンド プロンプトで次のように入力します。

ImperialSpecs.PreserveElementDimensions = 1;

コードの生成とレビュー

モデルのコードを生成します。[C コード] タブで、[ビルド] をクリックします。

evalc('slbuild(''PreserveBusDims'')');

生成コードで多次元要素の次元が保持されます。ImperialSpecs バス オブジェクトの要素のうち、DimensionsInInches という名前の要素は [10 3] の多次元配列であり、WeightInPounds という名前の要素は [10] のベクトルです。[要素の次元を保持] プロパティは多次元配列に適用されます。

file = fullfile('PreserveBusDims_ert_rtw',...
    'PreserveBusDims.h');
coder.example.extractLines(file,'#define DEFINED_TYPEDEF_FOR_ImperialSpecs_', ...
    '} ImperialSpecs;',0,1);
typedef struct {
  real_T DimensionsInInches[10][3];
  real_T WeightInPounds[10];
} ImperialSpecs;

制限

  • N 次元のベクトルについては、N 次元のインデックスが指定されている場合でも、コード ジェネレーターは常に 1 次元配列を生成します。

参考

トピック