Генератор кода производит одномерные массивы в коде C/C + + для многомерных данных моделей. Для примера рассмотрим матрицу matrixParam
.
matrixParam = 1 2 3 4 5 6
matrixParam
в сгенерированном коде как:/* 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]; } } }