在生成的代码中启用和重用本地块输出
这个例子展示了如何将块输出指定为局部变量。代码生成器可以在生成的代码中重用这些局部变量。将块输出声明为局部变量可以节省ROM消耗。重用局部变量可以节省内存消耗,减少数据副本,并提高执行速度。
示例模型
使用轮廓尺寸,外港,获得,开关块来创建以下模型。在这个例子中,模型被命名
local_variable_ex
.为
G2
,打开增益块参数对话框。输入值为2
.为
G1
,输入值为3.
.为开关块,打开块参数对话框。为传递第一个输入的标准参数,选择
u2 > =阈值
.
生成没有优化的代码
打开“模型配置参数”对话框。选择解算器窗格。为类型参数,选择
固定步
.清除配置参数>信号存储重用参数。
选择代码生成>报告窗格并选择创建代码生成报告.
选择代码生成窗格。选择只生成代码,然后,在模型窗口中,按Ctrl + B.代码生成完成后,将出现HTML代码生成报告。
在代码生成报告中,选择
local_variable_ex.c
节并查看模型阶跃函数。增益块输出是全局变量local_variable_ex_B。G2
和local_variable_ex_B。G1
.
/*模型步骤函数*/ void local_variable_ex_step(void) {/* Switch: '/Switch'合并:* Inport: ' /In1' */ if (local_variable_ex_U. 0)。In1 > = 0.0){/ *获得:“< Root > / G2”* / local_variable_ex_B。G2 = 2.0 * local_variable_ex_U.In1;/* Outport: ' /Out1' */ local_variable_ex_Y。Out1 = local_variable_ex_B.G2;其他}{/ *获得:“< Root > / G1”* / local_variable_ex_B。G1 = 3.0 * local_variable_ex_U.In1;/* Outport: ' /Out1' */ local_variable_ex_Y。Out1 = local_variable_ex_B.G1;} /* Switch结束:' /Switch' */
启用本地块输出和生成代码
选择配置参数>信号存储重用参数。的信号存储重用启用以下优化参数:
启用本地块输出
重用本地块输出
消除多余的局部变量(表达式折叠)
清晰的重用本地块输出和消除多余的局部变量(表达式折叠).
生成代码并查看模型步骤函数。模型阶跃函数中有三个局部变量,因为您选择了优化参数启用本地块输出.局部变量
rtb_G2
和rtb_G1
的输出获得块。局部变量rtb_Switch
方法的输出开关块。
/*模型步骤函数*/ void local_variable_ex_step(void) {real_T rtb_Switch;real_T rtb_G2;real_T rtb_G1;/* Switch: '/Switch'合并:* Inport: ' /In1' */ if (local_variable_ex_U。In1 > = 0.0){/ *获得:“< Root > / G2”* / rtb_G2 = 2.0 * local_variable_ex_U.In1;rtb_Switch = rtb_G2;} else{/*增益:' /G1' */ rtb_G1 = 3.0 * local_variable_ex_U.In1;rtb_Switch = rtb_G1;} /*交换机结束:' /Switch' */ /*输出:' /Out1' */ local_variable_ex_Y. 0Out1 = rtb_Switch;
重用本地块输出并生成代码
选择配置参数>重用本地块输出参数。
生成的代码。在
local_variable_ex.c
节中,查看模型阶跃函数。这里有一个局部变量,rtb_G2
,代码生成器使用了三次。
/*模型步骤函数*/ void local_variable_ex_step(void) {real_T rtb_G2;/* Switch: '/Switch'合并:* Inport: ' /In1' */ if (local_variable_ex_U。In1 > = 0.0){/ *获得:“< Root > / G2”* / rtb_G2 = 2.0 * local_variable_ex_U.In1;} else{/*增益:' /G1' */ rtb_G2 = 3.0 * local_variable_ex_U.In1;} /*交换机结束:' /Switch' */ /*输出:' /Out1' */ local_variable_ex_Y. 0Out1 = rtb_G2;
额外的临时变量rtb_Switch
关联的数据副本不在生成的代码中。