Выберите Array Layout for Matrices in Generated Code

При генерации кода из графика Stateflow®, который использует C в качестве языка действия, можно задать размещение массивов для матриц. Например, рассмотрите эту матрицу:

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

{1, 4, 2, 5, 3, 6}
Если вы выбираете главное строкой размещение, генератор кода сглаживает матрицу и хранит ее в памяти с этим расположением:
{1, 2, 3, 4, 5, 6}
Если у вас есть Embedded Coder®, можно сохранить мультиразмерность Stateflow локальные данные, предотвратить его выравнивание и реализовать матрицу как двумерный массив с этим расположением:
{{1, 2, 3}, {4, 5, 6}}
Размещение главного строкой и многомерного массива может упростить интеграцию с внешним кодом. Для получения дополнительной информации смотрите Генерацию кода Матриц и Массивов (Simulink Coder) и Сохранение Размерности Многомерных массивов (Embedded Coder).

Размещение главного массива столбца

По умолчанию параметром конфигурации Размещения Массивов для модели Simulink® является Column-Major. Когда вы кликаете по значку Модели Сборки, генератор кода сглаживает все матричные данные в одномерные массивы, располагая их содержимое в главном столбцом размещении.

Например, эта диаграмма Stateflow содержит локальные данные x размера [2 3]. Акты государственной власти индексируют элементы в x номером строки и столбца.

Если вы генерируете код, файл, sf_matrix_layout.c реализует локальные данные x в главном столбцом размещении с этими строками кода:

...
sf_matrix_layout_DW.x[0] = 1.0;
sf_matrix_layout_DW.x[2] = 2.0;
sf_matrix_layout_DW.x[4] = 3.0;
sf_matrix_layout_DW.x[1] = 4.0;
sf_matrix_layout_DW.x[3] = 5.0;
sf_matrix_layout_DW.x[5] = 6.0;
...

Сгенерированный код обращается к элементам x при помощи только одного индекса.

Размещение главного массива строки

Главное строкой размещение может улучшать производительность определенных алгоритмов. Например, см. Алгоритм Интерполяции для Размещения Главного массива строки (Embedded Coder).

Выбрать размещение главного массива строки для предыдущего примера:

  1. Откройте диалоговое окно Model Configuration Parameters.

  2. В Code Generation> панель Interface, установленная параметр Array Layout на Row-Major.

  3. Кликните по значку Build Model.

Файл sf_matrix_layout.c реализует локальные данные x в главном строкой размещении с этими строками кода:

  ...
  sf_matrix_layout_DW.x[0] = 1.0;
  sf_matrix_layout_DW.x[1] = 2.0; 
  sf_matrix_layout_DW.x[2] = 3.0;
  sf_matrix_layout_DW.x[3] = 4.0;
  sf_matrix_layout_DW.x[4] = 5.0;
  sf_matrix_layout_DW.x[5] = 6.0;
  ...
Сгенерированный код обращается к элементам x при помощи только одного индекса.

Главное строкой размещение не поддержано в:

  • Графики и табличные блоки изменения состояния, которые используют MATLAB® в качестве языка действия.

  • Графики, которые содержат функции таблицы истинности, которые используют MATLAB в качестве языка действия.

  • Графики, которые содержат функции MATLAB.

  • Графики, которые используют пользовательский код С.

  • Блоки таблицы истинности.

Размещение многомерного массива

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

  1. Откройте диалоговое окно Model Configuration Parameters.

  2. В Code Generation> панель Interface:

    • Установите параметр Array Layout на Row-Major.

    • Установите флажок Preserve Stateflow local data array dimensions.

  3. Кликните по значку Build Model.

Файл sf_matrix_layout.c реализует локальные данные x как двумерный массив с этими строками кода:

  ...
  sf_matrix_layout_DW.x[0][0] = 1.0;  
  sf_matrix_layout_DW.x[0][1] = 2.0;
  sf_matrix_layout_DW.x[0][2] = 3.0;
  sf_matrix_layout_DW.x[1][0] = 4.0; 
  sf_matrix_layout_DW.x[1][1] = 5.0;
  sf_matrix_layout_DW.x[1][2] = 6.0;
  ...
Сгенерированный код обращается к элементам x при помощи двух индексов.

Размещение многомерного массива доступно для:

  • Локальные данные в диаграммах Stateflow.

  • Параметры и импорт корневого уровня и данные о выходном порте в моделях Simulink®.

Многомерное размещение не доступно для сигналов шины, содержащих данные о многомерном массиве. Многомерное размещение не поддержано в:

  • Графики, которые содержат сообщения.

  • Допускающие повторное использование графики или графики в допускающих повторное использование родительских подсистемах.

Для получения дополнительной информации смотрите Размерности Заповедника Многомерных массивов в Сгенерированном коде (Embedded Coder).

Похожие темы