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

По умолчанию сгенерированный код содержит одномерные массивы для многомерных данных модели. В диалоговом окне 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. Выбор этого свойства сохраняет размерности для экземпляров вашего класса памяти. Чтобы изменить поведение по умолчанию для экземпляра вашего класса памяти, используйте редактор Отображений Кода.

Чтобы сохранить размерности, когда вы спроектируете свой собственный класс памяти, используйте свойство 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 проверьте, что параметр Array layout (Simulink Coder) устанавливается на Row-major.

  3. В Редакторе Simulink выберите приложение Embedded Coder.

  4. Во вкладке C Code кликните по вкладке Model Data Editor.

  5. В 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. На вкладке C Code выберите Settings> 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 можно сохранить размерности External parameter objects и Model parameters для поддерживаемых классов памяти.

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

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

  2. В Редакторе Simulink выберите приложение Embedded Coder.

  3. Во вкладке C Code кликните по вкладке Model Data Editor.

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

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

  6. Выберите переменную 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 } } ;

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

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

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

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

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

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

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

Ограничения

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

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

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

    • ResolveStateflow локальные данные как объект сигнала.

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

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

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

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

Похожие темы