Сохраните размерности элементов шины в сгенерированном коде

По умолчанию сгенерированный код содержит одномерные массивы для многомерных данных модели. В диалоговом окне Configuration Parameters, если вы устанавливаете параметр размещения Массивов на Row-major, можно сохранить размерности многомерных массивов в сгенерированном коде. Смотрите Размерности Заповедника Многомерных массивов в Сгенерированном коде.

В сгенерированном коде можно сохранить размерности импорта корневого уровня и выходных портов, параметров, сигналов, состояний, интерполяционных таблиц и хранилищ данных путем конфигурирования классов памяти в редакторе Отображений Словаря и Кода Embedded Coder. Свойство измерений массива Заповедника, которое вы конфигурируете для классов памяти, применимо к элементам данных в модели. Вы не можете использовать свойство класса памяти сохранить размерности элементов шины, потому что объекты шины являются глобальными типами, обычно совместно используемыми несколькими элементами данных, такими как состояния, сигналы, и так далее.

Чтобы сохранить размерности объектов шины, которые содержат многомерные элементы шины, используйте свойство размерностей элемента Заповедника в Редакторе Шины. Можно сохранить размерности объектов шины для моделей ERT только.

Открытая модель в качестве примера

1. Откройте модель rtwdemo_preservedimensions_slbus.

rtwdemo_preservedimensions_slbus;

2. Откройте приложение Embedded Coder.

3. В диалоговом окне Configuration Parameters проверьте, что размещение массива параметров установлено в Row-major.

Сконфигурируйте элементы шины

1. Модель включает их Simulink.Bus объекты в базовом рабочем пространстве:

  • ImperialSpecs

  • MetricSpecs

На Панели инструментов Simulink вкладка Modeling, в галерее Design, нажимает Bus Editor. В качестве альтернативы в командной строке MATLAB, введите buseditor.

2. Для объекта ImperialSpecs шины, откройте вкладку Code Generation и установите флажок размерностей элемента Preserve.

В качестве альтернативы в командной строке MATLAB, введите:

ImperialSpecs.PreserveElementDimensions = 1;

3. Нажмите Apply и закройте диалоговое окно Bus Editor.

Сгенерируйте и рассмотрите код

Сгенерируйте код для модели. На вкладке C Code нажмите Build.

currentDir = pwd;
[~,cgDir] = rtwdemodir();
evalc('slbuild(''rtwdemo_preservedimensions_slbus'')');

Сгенерированный код сохраняет размерности многомерного элемента шины. В ImperialSpecs соедините шиной объект, элемент шины DimensionsInInches многомерный массив [10 3] тогда как элемент шины WeightInPounds вектор из [10]. Свойство размерностей элемента Заповедника применяется для многомерных массивов.

file = fullfile('rtwdemo_preservedimensions_slbus_ert_rtw',...
    'rtwdemo_preservedimensions_slbus.h');
rtwdemodbtype(file,'#define DEFINED_TYPEDEF_FOR_ImperialSpecs_', ...
    '} ImperialSpecs;',0,1);
typedef struct {
  real_T DimensionsInInches[10][3];
  real_T WeightInPounds[10];
} ImperialSpecs;

Похожие темы