矢量运算优化
这个例子展示了Simulink®Coder™如金宝app何通过设置块输出来优化生成的代码,为Mux、Sum、增益和总线等块生成向量到标量。这种优化通过用局部变量替换临时本地数组来减少堆栈内存。
示例模型
在模型中,rtwdemo_VectorOptimization,增益块的输出G1
而且G2
矢量信号tmp1
而且tmp2
.这些向量的宽度是10。
模型=“rtwdemo_VectorOptimization”;open_system(模型);set_param(模型,“SimulationCommand”,“更新”)
生成代码
为构建和检查过程创建一个临时文件夹(在系统临时文件夹中)。
currentDir = pwd;[~,cgDir] = rtwdemodir();
构建模型。
slbuild(模型)
# # #开始构建过程:rtwdemo_VectorOptimization # # #成功完成构建过程:rtwdemo_VectorOptimization模型建立目标:总结构建模型重建行动的理由 ============================================================================================================ rtwdemo_VectorOptimization代码生成和编译。代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 10.998s
优化的代码已经导入rtwdemo_VectorOptimization.c
.的信号tmp1
而且tmp2
局部变量是rtb_tmp1
而且rtb_tmp2
.
cfile = fullfile(cgDir,“rtwdemo_VectorOptimization_grt_rtw”,...“rtwdemo_VectorOptimization.c”);rtwdemodbtype(用'/*模拟步骤',/*模型初始化, 1, 0);
/*模型步长函数*/ void rtwdemo_VectorOptimization_step(void) {real_T rtb_Sum3_j;real_T rtb_tmp1_a;real_T rtb_tmp2_j;int32_T我;For (i = 0;I < 10;i++){/*增益:'<根>/G2'合并:* UnitDelay: '<根>/X2' */ rtb_tmp2_j = 0.3 * rtwdemo_vectoroptimization_dww . x2_dstate [i];* UnitDelay: '/X1' */ rtb_tmp1_a = 0.2 * rtwdemo_vectoroptimization_dww . x1_dstate [i];/* Sum: '<根>/Sum3'合并:*增益:'<根>/G3' *输入:'<根>/In2' * Sum: '<根>/Sum1' * Sum: '<根>/Sum2' * UnitDelay: '<根>/X3' */ rtb_Sum3_j = ((rtwdemo_VectorOptimization_U。In2[i] - 0.4 * rtwdemo_vectoroptimization_dww . x3_dstate [i]) - rtb_tmp2_j) - rtb_tmp1_a;/* Outport: ' /Out2' */ rtwdemo_VectorOptimization_Y. Outport: ' /Out2'Out2[i] = rtb_Sum3_j; /* Update for UnitDelay: ' /X3' */ rtwdemo_VectorOptimization_DW.X3_DSTATE[i] = rtb_tmp2_j; /* Update for UnitDelay: ' /X2' */ rtwdemo_VectorOptimization_DW.X2_DSTATE[i] = rtb_tmp1_a; /* Update for UnitDelay: ' /X1' */ rtwdemo_VectorOptimization_DW.X1_DSTATE[i] = rtb_Sum3_j; } }
关闭模型和代码生成报告。
bdclose rtwdemoclean(模型);cd (currentDir)