По умолчанию сгенерированный код содержит одномерные массивы для многомерных данных моделей. В диалоговом окне Параметров конфигурации, если вы устанавливаете параметр Массива размещения равным 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;