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

По умолчанию сгенерированный код содержит одномерные массивы для многомерных данных модели. В диалоговом окне Configuration Parameters, если вы устанавливаете Array layout (Simulink Coder) параметр к Row-major, можно сохранить размерности многомерных массивов в сгенерированном коде. Сохранение измерений массива в сгенерированном коде улучшает интеграцию с внешним кодом.

MATLAB® и C организуют многомерные данные по-разному. Для получения дополнительной информации смотрите Сохранение Размерности Многомерных массивов.

Сохраните размерности для пользовательских классов памяти

Можно сохранить размерности импорта корневого уровня и выходных портов, параметров и интерполяционных таблиц в сгенерированном коде для этих пользовательских классов памяти:

  • Const

  • Volatile

  • ConstVolatile

  • ExportToFile

  • ImportFromFile

  • FileScope

Выберите свойство Preserve array dimensions, когда вы выберете один из предыдущих пользовательских классов памяти для этих объектов:

  • Объект Simulink.Signal сопоставил с корневым уровнем Inport/Outport

  • Simulink.Parameter

  • Simulink.LookupTable

Сохраните размерности для новых пользовательских классов памяти

Чтобы сохранить размерности, когда вы разрабатываете свой собственный класс памяти в Словаре Embedded Coder®, выбирают опцию Preserve array dimensions в Property Inspector. Выбор этого свойства сохраняет размерности для всех экземпляров вашего пользовательского класса памяти. Чтобы изменить поведение по умолчанию для экземпляра вашего пользовательского класса памяти, используйте Model Data Editor.

Чтобы сохранить размерности, когда вы разработаете свой собственный класс памяти, используйте новое свойство Preserve array dimensions в Custom Storage Class Designer. Preserve array dimensions имеет эти опции:

  • No (значение по умолчанию) — Сглаживает многомерный массив к одной размерности в сгенерированном коде.

  • Yes — Измерения массива консервов для всех параметров заданного пользовательского класса памяти.

  • Instance Specific — Если вы хотите сохранить измерения массива для каждого экземпляра пользовательского класса памяти, включите свойство Preserve array dimensions на объекте параметра. Для пакета Simulink этой установкой свойства является Instance Specific по умолчанию.

Сохраните размерности для Stateflow локальные данные

Чтобы сохранить размерности Stateflow®, локальные данные в сгенерированном коде, в диалоговом окне Configuration Parameters, выбирают Preserve Stateflow local data array dimensions (Simulink Coder) параметр.

Можно сохранить размерности для всех встроенных классов памяти и этих пользовательских классов памяти:

  • Volatile

  • ExportToFile

  • ImportFromFile

  • FileScope

  • Localizable

Если объект Simulink.Signal сопоставлен как локальные данные с диаграммой Stateflow в модели, можно сохранить размерности объекта Simulink.Signal для всех встроенных классов памяти и предыдущих пользовательских классов памяти.

Сохраните размерности Корневого Уровня Inports/Outports

  1. Откройте модель rtwdemo_preservedimensions в качестве примера.

  2. В диалоговом окне Configuration Parameters, на Code Generation> панель Interface, проверяют, что Array layout (Simulink Coder) установлен в Row-major.

  3. Откройте модель в Редакторе Simulink перспектива кода. Выберите Code> C/C++ Code> Configure Model in Code Perspective.

  4. В Model Data Editor нажмите кнопку Show/refresh additional information.

Сохраните размерности для импорта корневого уровня и выходных портов путем конфигурирования класса памяти для каждого блока или путем конфигурирования настроек по умолчанию.

  1. В Model Data Editor выберите вкладку Inports/Outports.

  2. Установите Change view выпадающий список на Code.

  3. Выберите источник Temperature и установите Storage Class на ExportToFile.

  4. В Property Inspector, в соответствии с меню Code, выбирают свойство Preserve array dimensions.

  5. Создайте модель и сгенерируйте код. Сгенерированный код сохраняет размерности.

    real_T Temperature[2][3];

  6. В Model Data Editor выберите эти источники и обновите их Storage Class:

    • Pressure к Model default

    • Target Volume к Auto

  7. В редакторе Отображений Кода выберите вкладку Data Defaults.

    Выберите Inports в Категории Элемента модели. Заданным Storage Class является ExportToFile. В Property Inspector, в соответствии с меню Code, выбирают свойство PreserveDimensions.

    Когда Storage Class является или Auto или Model default, настройки в Code Mappings>, Data Defaults применяется.

  8. Создайте модель и сгенерируйте код. Сгенерированный код сохраняет размерности.

    real_T Pressure[2][3];
    ...
    real_T rtTargetVolume[2][3];

    Если импорт корневого уровня и выходной порт решают к объекту Simulink.Signal, можно сохранить размерности объекта Simulink.Signal.

Когда вы создаете свои собственные классы памяти в Словаре Embedded Coder, можно выбрать свойство Preserve array dimensions.

  1. Открытый Словарь Embedded Coder. Выберите Code> C/C++ Code > Embedded Coder Dictionary.

  2. Чтобы добавить класс памяти, нажмите кнопку Add.

  3. В Property Inspector задайте:

    • Имя: MyStorageClass

    • Выберите свойство Preserve array dimensions.

  4. В редакторе Отображений Кода выберите вкладку Data Defaults.

  5. Выберите Outports в категории элемента модели. Задайте Storage Class как MyStorageClass.

  6. Создайте модель и сгенерируйте код. Сгенерированный код сохраняет размерности.

    /* Storage class 'MyStorageClass' */
    real_T rtVolume[2][3];
    real_T rtActuatorCommand[2][3];

В Code Mappings> Data Defaults, можно сохранить размерности Global parameters и Local parameters для поддерживаемых пользовательских классов памяти.

Сохраните размерности параметров, интерполяционных таблиц и Stateflow локальные данные

  1. Откройте модель rtwdemo_preservedimensions в качестве примера.

  2. Откройте модель в Редакторе Simulink перспектива кода. Выберите Code> C/C++ Code> Configure Model in Code Perspective.

  3. В Model Data Editor нажмите кнопку Show/refresh additional information.

  4. Выберите вкладку Parameters и установите Change view выпадающий список на Code.

  5. Выберите переменную Hvolume рабочего пространства модели. Убедитесь, что заданный Storage class поддерживается, чтобы сохранить размерности и что свойство Preserve array dimensions в Property Inspector выбрано. В этом случае Storage class установлен в ExportToFile.

    Когда вы создаете модель, сгенерированный код:

    /* Definition for custom storage class: ExportToFile */
    real_T Hvolume[2][3] = { { 1.01, 0.98, 1.0 }, { 1.03, 0.99, 1.02 } } ;

  6. Откройте TP подсистемы для Объема. Подсистема содержит Интерполяционную таблицу.

  7. В Model Data Editor выберите вкладку Parameters. Убедитесь, что свойство Preserve array dimensions выбрано для переменной tp2Lut.

    Когда вы создаете модель, сгенерированный код в заголовочном файле:

    typedef struct {
      real_T BP1[11];
      real_T BP2[9];
      real_T Table[11][9];
    } t2pLut;

  8. В этой модели диаграмма Stateflow разрешает локальные данные к объекту Simulink.Signal. Чтобы сохранить мультиразмерность Stateflow, локальные данные, на Configuration Parameters> Code Generation> панель Interface, включают Preserve Stateflow local data array dimensions (Simulink Coder) параметр конфигурации.

    Когда вы создаете модель, сгенерированный код:

    /* Exported block states */
    real_T LogSignal[11][9];               /* '<Root>/Log volume difference' */

Ограничения

  • Многомерные массивы в шинах Simulink сглажены в сгенерированном коде.

  • Вы не можете сохранить измерения массива для объектов параметра MPT.

  • Генератор кода не сохраняет размерности для объектов сигнала когда вы:

    • Разрешите Stateflow локальные данные как объект сигнала.

    • Примените пользовательский пакет к объекту сигнала и переименуйте класс памяти, который поддерживает сохранение размерности.

    • Выберите параметр конфигурации Preserve Stateflow local data array dimensions.

    • Используйте объект сигнала для элементов модели кроме импорта корневого уровня или выходных портов.

Похожие темы