В этом примере показано, как Simulink® Coder™ оптимизирует сгенерированный код путем установки блока выход, который генерирует векторы к скалярам, для блоков, таких как Мультиплексор, Сумма, Усиление и Шина. Эта оптимизация уменьшает стековую память, заменяя временные локальные массивы на локальные переменные.
В модели, rtwdemo_VectorOptimization, выход Усиления блокирует G1 и G2 сигналы вектора tmp1 и tmp2. Эти векторы имеют ширину 10.
model = 'rtwdemo_VectorOptimization'; open_system(model); set_param(model, 'SimulationCommand', 'update')

Создайте временную папку (в вашей системе временная папка) для сборки и инспекционного процесса.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_VectorOptimization ### Successful completion of build procedure for model: rtwdemo_VectorOptimization
Оптимизированный код находится в rtwdemo_VectorOptimization.c. Сигналы tmp1 и tmp2 локальные переменные rtb_tmp1 и rtb_tmp2.
cfile = fullfile(cgDir,'rtwdemo_VectorOptimization_grt_rtw',... 'rtwdemo_VectorOptimization.c'); rtwdemodbtype(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void rtwdemo_VectorOptimization_step(void)
{
int32_T i;
real_T rtb_tmp2;
real_T rtb_tmp1;
real_T rtb_Sum3;
for (i = 0; i < 10; i++) {
/* Gain: '<Root>/G2' incorporates:
* UnitDelay: '<Root>/X2'
*/
rtb_tmp2 = 0.3 * rtwdemo_VectorOptimization_DW.X2_DSTATE[i];
/* Gain: '<Root>/G1' incorporates:
* UnitDelay: '<Root>/X1'
*/
rtb_tmp1 = 0.2 * rtwdemo_VectorOptimization_DW.X1_DSTATE[i];
/* Sum: '<Root>/Sum3' incorporates:
* Gain: '<Root>/G3'
* Inport: '<Root>/In2'
* Sum: '<Root>/Sum1'
* Sum: '<Root>/Sum2'
* UnitDelay: '<Root>/X3'
*/
rtb_Sum3 = ((rtwdemo_VectorOptimization_U.In2[i] - 0.4 *
rtwdemo_VectorOptimization_DW.X3_DSTATE[i]) - rtb_tmp2) -
rtb_tmp1;
/* Outport: '<Root>/Out2' */
rtwdemo_VectorOptimization_Y.Out2[i] = rtb_Sum3;
/* Update for UnitDelay: '<Root>/X3' */
rtwdemo_VectorOptimization_DW.X3_DSTATE[i] = rtb_tmp2;
/* Update for UnitDelay: '<Root>/X2' */
rtwdemo_VectorOptimization_DW.X2_DSTATE[i] = rtb_tmp1;
/* Update for UnitDelay: '<Root>/X1' */
rtwdemo_VectorOptimization_DW.X1_DSTATE[i] = rtb_Sum3;
}
}
Закройте отчет генерации кода и модель.
bdclose(model) rtwdemoclean; cd(currentDir)