Выберите раскладку массивов для матриц в сгенерированном коде

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

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

{1, 4, 2, 5, 3, 6}

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

{1, 2, 3, 4, 5, 6}

Если у вас есть Embedded Coder®, можно сохранить мультиразмерность матрицы и сохранить его как двумерный массив с этим расположением:

{{1, 2, 3}, {4, 5, 6}}

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

Упорядоченное по столбцам размещение массивов

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

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

Сгенерировать код для этой модели:

  1. Во вкладке Apps выберите Simulink Coder или Embedded Coder.

  2. Во вкладке C Code нажмите Build.

Файл 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. Откройте диалоговое окно Configuration Parameters.

  2. В Генерации кода> Интерфейсная панель, установленная параметр Размещения Массивов на Row-Major.

  3. Во вкладке Apps выберите Simulink Coder или Embedded Coder.

  4. Во вкладке C Code нажмите Build.

Файл 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 при помощи только одного индекса. Индексы появляются в увеличивающемся порядке.

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

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

  2. В Генерации кода> Интерфейсная панель, установленная параметр Размещения Массивов на Row-Major.

  3. В Целевой панели Симуляции выберите пользовательский код Import. Установите функциональное размещение массивов По умолчанию на Row-major.

Можно также задать упорядоченное по строкам размещение массивов для отдельных функций. В Целевой панели Симуляции нажмите Exception функцией. В окне Array Layout for Custom Code Functions можно добавить или удалить функции и задать их размещение отдельного массива.

Если вы включаете упорядоченное по строкам размещение массивов в графике, который использует пользовательский код С, глобальные переменные и аргументы функций, определяемых пользовательского кода в пользовательском коде должны быть скалярами, векторами или структурами скаляров и векторов. Задайте размер вектора n-элемента как n, и не как [n 1] или [1 n].

Когда вы включаете упорядоченное по строкам размещение массивов в графиках, которые используют операторы обнаружения изменения, генерация кода производит ошибку. Прежде, чем сгенерировать код в графиках, которые используют операторы обнаружения изменения, включите упорядоченное по столбцам размещение массивов. Смотрите Операторы Обнаружения Изменения.

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

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

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

  1. Включите упорядоченное по строкам размещение.

  2. Во вкладке Apps выберите Embedded Coder.

  3. Во вкладке C Code выберите Code Interface> Default Code Mappings, чтобы открыть редактор Отображений Кода и Property Inspector.

  4. В редакторе Отображений Кода, на вкладке Data Defaults, выбирают Signals, состояния и внутреннюю категорию данных и устанавливают Класс памяти как Localizable. Если редактор Отображений Кода пуст, перейдите к Модели Simulink.

  5. В Property Inspector, в Секции кода, выбирают PreserveDimensions.

  6. Во вкладке C Code нажмите Build.

Файл 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

  • Передайте данные в диаграммах Stateflow

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

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

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

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

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

Параметры конфигурации Simulink

Похожие темы