这个例子展示了Simulink®Coder™如金宝app何通过设置块输出来优化生成的代码,块输出为标量生成向量,例如Mux、Sum、Gain和Bus。这种优化通过用局部变量替换临时局部数组来减少堆栈内存。
在模型中,rtwdemo_VectorOptimization,增益块的输出G1
和G2
是矢量信号tmp1
和tmp2
.这些向量的宽度是10。
模型=“rtwdemo_VectorOptimization”;open_system(模型);set_param(模型,“SimulationCommand”,“更新”)
为构建和检查过程创建一个临时文件夹(在系统临时文件夹中)。
currentDir = pwd;[~, cgDir] = rtwdemodir ();
构建的模型。
rtwbuild(模型)
###成功完成模型的构建过程:rtwdemo_VectorOptimization
优化的代码在rtwdemo_VectorOptimization.c
.的信号tmp1
和tmp2
是局部变量rtb_tmp1
和rtb_tmp2
.
用= fullfile (cgDir,“rtwdemo_VectorOptimization_grt_rtw”,...“rtwdemo_VectorOptimization.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/*模型步长函数*/ void rtwdemo_VectorOptimization_step(void) {int32_T i;real_T rtb_tmp2;real_T rtb_tmp1;real_T rtb_Sum3;For (i = 0;我< 10;i++) {/* Gain: '/G2'合并:* UnitDelay: ' /X2' */ rtb_tmp2 = 0.3 * rtwdemo_vectoroptimization_db . x2_dstate [i];/*增益:' /G1'合并:* UnitDelay: ' /X1' */ rtb_tmp1 = 0.2 * rtwdemo_vectoroptimization_db . x1_dstate [i]; /* rtwdemo_vectoroptimization_db . x1_dstate [i];/* Sum: ' /Sum3'合并:* Gain: ' /G3' * Inport: ' /In2' * Sum: ' /Sum1' * Sum: ' /Sum2' * UnitDelay: ' /X3' */ rtb_Sum3 = ((rtwdemo_VectorOptimization_U. txt)In2[i] - 0.4 * rtwdemo_vectoroptimization_db . x3_dstate [i]) - rtb_tmp2) - rtb_tmp1;/* Outport: ' /Out2' */ rtwdemo_VectorOptimization_Y. txtOut2[我]= rtb_Sum3; /* Update for UnitDelay: ' /X3' */ rtwdemo_VectorOptimization_DW.X3_DSTATE[i] = rtb_tmp2; /* Update for UnitDelay: ' /X2' */ rtwdemo_VectorOptimization_DW.X2_DSTATE[i] = rtb_tmp1; /* Update for UnitDelay: ' /X1' */ rtwdemo_VectorOptimization_DW.X1_DSTATE[i] = rtb_Sum3; } }
关闭模型和代码生成报告。
bdclose rtwdemoclean(模型);cd (currentDir)