Генератор кода генерирует одномерные массивы в коде C/C++ для многомерных данных модели. Например, рассмотрите матричный matrixParam.
matrixParam =
1 2 3
4 5 6matrixParam в сгенерированном коде как:/* const_params.c */
matrixParam[6] = {1, 4, 2, 5, 3, 6};matrixParam в сгенерированном коде как:/* model.c */
extern const real_T matrixParam[6];
for(int i = 0; i < 6; i++) {
... = matrixParamValue[i];
}Когда вы устанавливаете образцовый параметр конфигурации Array layout (Simulink Coder) к Row-major, можно сохранить размерности многомерных массивов в сгенерированном коде. Сохранение измерений массива в сгенерированном коде улучшает интеграцию с внешним кодом.
Например, в размещении главного массива строки, генератор кода сохраняет измерения массива в определении типа в сгенерированном коде как:
/* const_params.c */
const real_T matrixParam[2][3] = {{1, 2, 3}, {4, 5, 6}};/* model.c */
extern const real_T matrixParam[2][3];
for(int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
... = matrixParam[i][j];
}
}Когда вы задаете многомерный массив в Окне Команды MATLAB, MATLAB хранит массив в главном столбцом формате. Например:
>> matrixParam.Value = [1 2 3; 4 5 6]; % Data inilitialized in row-major >> matrixParam.Value % Data displayed in row-major ans = 1 2 3 4 5 6 >> matrixParam.Value(:)' % Data stored in column-major ans = 1 4 2 5 3 6
Когда Embedded Coder® сохраняет размерности, сгенерированный код:
real_T matrixParam[2][3] = { { 1.0, 2.0, 3.0 }, { 4.0, 5.0, 6.0 } } ;Для n-D массивов, когда Embedded Coder генерирует главный строкой код и сохраняет измерения массива, индексный порядок сопоставим с MATLAB. Определение данных n-D массивов в сгенерированном коде не сопоставимо с данными, отображенными в Окне Команды MATLAB. Например, полагайте, что matrixParam является Simulink.Parameter:
>> matrixParam.Value = reshape(1:24,[4 3 2])
>> matrixParam.Value
ans(:,:,1) =
1 5 9
2 6 10
3 7 11
4 8 12
ans(:,:,2) =
13 17 21
14 18 22
15 19 23
16 20 24
>> matrixParam.Value(:)'
ans =
Columns 1 through 10
1 2 3 4 5 6 7 8 9 10
Columns 11 through 20
11 12 13 14 15 16 17 18 19 20
Columns 21 through 24
21 22 23 24В размещении главного массива строки генератор кода сохраняет измерения массива во время определения типа в сгенерированном коде как:
/* const_params.c */
const real_T matrixParam[4][3][2] = { { { 1.0, 13.0 }, { 5.0, 17.0 }, { 9.0, 21.0 } },
{ { 2.0, 14.0 }, { 6.0, 18.0 }, { 10.0, 22.0 } }, { { 3.0, 15.0 }, { 7.0, 19.0
}, { 11.0, 23.0 } }, { { 4.0, 16.0 }, { 8.0, 20.0 }, { 12.0, 24.0 } } };/* model.c */
extern const real_T matrixParam[4][3][2];
for (i = 0; i < 3; i++) {
for (i_1 = 0; i_1 < 4; i_1++) {
for (i_0 = 0; i_0 < 2; i_0++) {
... = ... + matrixParam[i_1][i][i_0];
}
}
}