Генератор кода создает одномерные массивы в коде 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) задано значение 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];
}
}
}