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

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

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

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

Сконфигурируйте элементы данных модели по умолчанию, чтобы сохранить размерности

Во вкладке Code Mappings> Data Defaults можно сконфигурировать эти категории элементов данных модели. Вы задаете класс памяти, чтобы сохранить размерности.

  • Inports

  • Outports

  • Signals, states, and internal data

  • Shared local data stores

  • Global data stores

  • Model parameters

  • External parameters

Затем когда вы устанавливаете Storage class на Auto или Model default на отдельных элементах данных модели, по умолчанию, генератор кода применяет настройку, которую вы настраиваете для соответствующих элементов данных модели во вкладке Data Defaults.

Рабочий процесс в качестве примера, который применим к предыдущим категориям элемента данных модели:

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

  2. В диалоговом окне Configuration Parameters проверьте, что параметр Array layout устанавливается на Row-major.

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

  4. Во вкладке C Code откройте редактор Отображений Кода. Выберите Code Interface> Default Code Mappings. Эта опция прикрепляет редактор Отображений Кода и панель Property Inspector.

  5. На вкладке Data Defaults выберите категорию Inports. Заданным Storage Class является ExportToFile. В Property Inspector, в разделе Code, выбирают свойство PreserveDimensions.

    Property Inspector attached to the Code Mappings editor. Shows the selected PreserveDimensions property check box

    Чтобы сконфигурировать программно свойство PreserveDimensions, используйте coder.mapping.defaults.set функция в окне команды MATLAB:

    coder.mapping.defaults.set('rtwdemo_preservedimensions', 'Inports',...
      'Storageclass', 'ExportToFile',...
      'PreserveDimensions', 'off')

    Можно создать новый класс памяти в Embedded Coder®, и затем указать что класс, чтобы сохранить размерности. Для получения дополнительной информации смотрите Размерности Заповедника для Новых Классов памяти.

    Для списка поддерживаемых классов памяти смотрите Классы памяти, Поддержанные, чтобы Сохранить Размерности.

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

    real_T rtPressure[2][3];
    real_T rtTargetVolume[2][3];
    real_T rtTemperature[2][3]; 

Сконфигурируйте отдельные элементы данных модели, чтобы сохранить размерности

Можно заменить настройки по умолчанию, заданные во вкладке Data Defaults путем конфигурирования отдельных источников элемента данных модели в других вкладках, таких как Inports, Outports, Parameters, Data Stores и Signals/States. Вот рабочий процесс в качестве примера, который применим к категориям элемента данных модели.

  1. От вкладки C Code откройте Code Interface> Individual Element Code Mappings.

  2. В редакторе Отображений Кода выберите вкладку Signals/States. Раздел Signals в настоящее время пуст. В данной модели может быть несколько сигналов. Некоторые из этих сигналов не могут быть важными при конфигурировании генерации кода. Можно отметить сигналы как сигналы интереса, которые относятся к настройке генерации кода. Когда вы добавляете сигнал явным образом, он добавляется к редактору Отображений Кода.

    В редакторе Отображений Кода откройте вкладку Signals/States. Выберите сигнал в Редакторе Simulink®, что вы хотите добавить к редактору Отображений Кода. Сделайте паузу на знаке (...), который, кажется, выше или ниже сигнальной линии открывает строку меню. Нажмите кнопку Add selected signals to code mappings. Сигнал заполняется в таблице Signals в редакторе Отображений Кода.Signal of interest is selected in the model and the action bar is displayed. The cursor is on the Enable Code Configuration option.

    В данном примере выберите сигнал, идущий от Диспетчера Объема подсистемы к Команде Привода выходного порта, и нажмите кнопку Add selected signals to code mappings.

  3. Согласно настройкам во вкладке Data Defaults, классом памяти по умолчанию для сигналов является Localizable. Настройка по умолчанию для сигналов также задает, чтобы сохранить размерности многомерных массивов.

    По умолчанию Storage Class индивидуально добавленного сигнала сконфигурирован как Auto. Можно заменить настройку по умолчанию для отдельного сигнала путем изменения спецификации добавленного сигнала под вкладкой Signals/States.

    Если вы хотите применить настройки по умолчанию, установите Storage Class на Model default: Localizable. Если вы хотите обеспечить тот же класс памяти, Localizable, но не сохраняют размерности для выбранного сигнала, задают Storage Class как Localizable и очистите свойство PreserveDimensions в Property Inspector.

    Примечание

    Если вы задаете Storage Class как Model default, вы не можете заменить настройки по умолчанию, заданные во вкладке Data Defaults. Чтобы заменить технические требования по умолчанию для класса памяти по умолчанию, выберите тот класс памяти и измените настройки для отдельного элемента моделирования.

  4. В Property Inspector задайте имя сигнала в свойстве Identifier, таком как VolumeController.

    Property Inspector pane attached to the Code Mappings editor. Shows the cleared Preserve array dimensions property check box with non-empty Identifier property.

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

    /* Definition for custom storage class: Localizable */
    static real_T LogSignal[11][9];        /* '<S2>/Log volume difference' */
    real_T VolumeController[6];            /* '<S3>/Gain' */
    static real_T rtIterationCount[2][3];  /* '<S2>/IterationCount' */
    static real_T rtIterationCount_g[2][3];/* '<S2>/PreviousVolumeErrorAverage' */
    static real_T rtVolumedifference[2][3];/* '<S1>/Volume difference' */

Классы памяти, поддержанные, чтобы сохранить размерности

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

  • Const

  • Volatile

  • ConstVolatile

  • ExportToFile

  • ImportFromFile

  • FileScope

  • Localizable

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

Чтобы сохранить размерности, когда вы проектируете свой собственный класс памяти, в Словаре Embedded Coder, в Property Inspector, выбирают свойство Preserve array dimensions. Выбор этого свойства сохраняет размерности для экземпляров вашего класса памяти. Чтобы использовать класс памяти, в редакторе Отображений Кода, конфигурируют категории элемента модели путем определения Storage Class к новому классу памяти, который вы создали.

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

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

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

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

Ограничения

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

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

Смотрите также

| |

Похожие темы