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

По умолчанию сгенерированный код содержит одномерные массивы для многомерных данных моделей. В диалоговом окне Параметров конфигурации, если вы устанавливаете параметр 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. В диалоговом окне Параметров конфигурации проверьте, что для 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 в редакторе Code Mappings.Signal of interest is selected in the model and the action bar is displayed. The cursor is on the Enable Code Configuration option.

    В данном примере выберите сигнал, идущий от подсистемы Volume Controller к команде Outport Activator Command и нажмите кнопку 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, установите Storage Type равным Unstructured и выберите свойство Preserve array dimensions. Выбор этого свойства сохраняет размерности для образцов вашего класса памяти. Чтобы использовать класс памяти, в редакторе Отображения настройте категории элементов модели, задав Storage Class к новому классу памяти, который вы создали.

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

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

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

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

Ограничения

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

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

См. также

| |

Похожие темы