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

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

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

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

Откройте модель примера

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

rtwdemo_preservedimensions_slbus;

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

3. В диалоговом окне Параметров конфигурации проверьте, что значение параметра Массива размещения установлено на Row-major.

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

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

  • ImperialSpecs

  • MetricSpecs

На панели инструментов Simulink, вкладке Modeling, в галерее Design, нажмите Bus Editor. Кроме того, в командной строке MATLAB введите buseditor.

2. Для объекта шины ImperialSpecsоткройте вкладку Генерация кода и установите флажок Сохранить размерности элемента.

Кроме того, в командной строке MATLAB введите:

ImperialSpecs.PreserveElementDimensions = 1;

3. Нажмите кнопку Применить (Apply) и закройте диалоговое окно Редактор шин (Bus Editor).

Сгенерируйте и проверьте код

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

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

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

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;

Похожие темы