Языки программирования и среды предполагают единую структуру массива для всех данных. MATLAB ® и Fortran по умолчанию используют компоновку «основной столбец», в то время как C и C++ используют компоновку «основная строка». С помощью Simulink ® Coder™ можно создать код C/C + +, использующий макет основной строки или макет основной строки.
Дополнительные сведения о генерации кода основной строки см. в разделе Генерация кода матриц и массивов.
Функциональные блоки MATLAB позволяют определять пользовательские функциональные возможности в моделях Simulink на языке MATLAB. Можно создать основной код строки для моделей, которые содержат функциональный блок MATLAB, используя основные данные строки или столбца. Дополнительные сведения о функциональных блоках MATLAB см. в разделе Реализация функций MATLAB с использованием блоков.
По умолчанию генератор кода генерирует основной код столбца. Для генерации кода C/C + + можно задать компоновку массива на уровне модели с помощью параметра конфигурации модели компоновки массива. Установка для этого параметра значенияRow-major включает модель для генерации основного кода строки. Чтобы включить функциональный блок MATLAB в модели для генерации основного кода строки, используйте coder.rowMajor функция на уровне функции внутри блока.
Для некоторых алгоритмов компоновка основных строк обеспечивает более эффективный доступ к памяти. Эффективный код получается при создании кода для модели, которая использует макет массива «строка-большая», а модель содержит функциональный блок MATLAB, использующий алгоритм для данных «строка-большая».
Рассмотрим пример модели ex_row_major_MLFB.

Эта модель содержит блок константы, имеющий [5 4] матрица. Чтобы задать матрицу, задайте для параметра Константа значение:
reshape(1:20,5,4)
[5 4] матрица. Чтобы задать матрицу, задайте для размеров порта значение [5 4].В диалоговом окне «Параметры конфигурации» задайте для параметра «Макет массива» значение Row-major.
Запись функции для добавления матрицы с именем addMatrix. Блок MATLAB Function наследует настройку компоновки массива из параметра конфигурации модели Array layout, если не указано иное.
Дополнительно можно использовать coder.rowMajor для явной установки макета массива блока MATLAB Function на макет основной строки.
function S = addMatrix(A,B) S = zeros(size(A)); for row = 1:size(A,1) for col = 1:size(A,2) S(row,col) = A(row,col) + B(row,col); end end
Создайте код для модели. На вкладке C Code нажмите кнопку Build.
Генератор кода создает код C:
for (b_row = 0; b_row < 5; b_row++) {
for (b_col = 0; b_col < 4; b_col++) {
rtb_S_tmp = (b_row << 2) + b_col;
rtb_S[rtb_S_tmp] = ex_row_major_MLFB_P.Constant_Value[rtb_S_tmp] +
ex_row_major_MLFB_U.Inport1[rtb_S_tmp];
}
}for петли. Первое for цикл получает доступ к строкам, а второй for цикл получает доступ к столбцам. Если структура массива блока MATLAB Function и модели одинаковая, генерируемый код эффективен, поскольку не требуется транспозиций или преобразования.Код смешанного большинства можно создать при наличии модели, которая работает с основными данными строки, и функционального блока MATLAB, который работает с основными данными столбца. При создании кода для модели, в которой используется компоновка «основной столбец», а модель содержит блок MATLAB Function, в котором используется компоновка «основная строка», генератор кода преобразует входные данные блока в компоновку «основная строка», а выходные данные блока, при необходимости, обратно в компоновку «основная строка». Смешанный мажоритарный код можно также создать при наличии модели, которая работает с основными данными столбца, и функционального блока MATLAB, который работает с основными данными строки.
Преобразования компоновки массива могут влиять на производительность.
Рассмотрим пример модели ex_row_major_MLFB. Дополнительные сведения о модели примера см. в разделе Создание основного кода строки.
В диалоговом окне «Параметры конфигурации» задайте для параметра «Макет массива» значение Row-major.
Обновить addMatrix функция в блоке MATLAB Function для основных данных столбца с помощью coder.columnMajor функция.
function S = addMatrix(A,B) coder.columnMajor; S = zeros(size(A)); for row = 1:size(A,1) for col = 1:size(A,2) S(row,col) = A(row,col) + B(row,col); end end
Создайте код для модели. На вкладке C Code нажмите кнопку Build.
Генератор кода создает код C:
for (b_row = 0; b_row < 4; b_row++) {
for (b_col = 0; b_col < 5; b_col++) {
B_tmp = (b_col << 2) + b_row;
B_tmp_0 = b_col + 5 * b_row;
B[B_tmp_0] = ex_row_major_MLFB_19b_U.Inport1[B_tmp];
A[B_tmp_0] = ex_row_major_MLFB_19b_P.Constant_Value[B_tmp];
}
}
for (b_row = 0; b_row < 5; b_row++) {
/* Outport: '<Root>/Outport' */
for (b_col = 0; b_col < 4; b_col++) {
B_tmp = 5 * b_col + b_row;
ex_row_major_MLFB_19b_Y.Outport[b_col + (b_row << 2)] = A[B_tmp] + B[B_tmp];
}