生成コードでのバス要素の次元の保持
既定では、多次元のモデル データについて、生成コードには 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 次元配列を生成します。