Генератор кода производит одномерные массивы в коде 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
Когда генератор кода сохраняет размерности, сгенерированный код:
real_T matrixParam[2][3] = { { 1.0, 2.0, 3.0 }, { 4.0, 5.0, 6.0 } } ;Для n-D массивов, когда генератор кода производит упорядоченный по строкам код и сохраняет измерения массива, порядок индекса сопоставим с 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];
}
}
}