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