在生成的代码中启用和重用本地块输出
这个例子显示了如何指定块输出为局部变量。代码生成器生成的代码可以重用这些局部变量。声明块输出作为局部变量保存罗消费。重用本地变量保存内存消耗,减少数据拷贝,并提高执行速度。
示例模型
使用轮廓尺寸,外港,获得,开关块创建以下模型。在这个例子中,模型命名
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
。
/ *模型阶跃函数* /空白local_variable_ex_step (void){/ *开关:“< Root > /开关”包含:*尺寸:“< Root > / In1”如果(local_variable_ex_U * /。In1 > = 0.0){/ *获得:“< Root > / G2”* / local_variable_ex_B。G2 = 2.0 * local_variable_ex_U.In1;/ *输出港:“< Root > /着干活”* / local_variable_ex_Y。着干活= local_variable_ex_B.G2;其他}{/ *获得:“< Root > / G1”* / local_variable_ex_B。G1 = 3.0 * local_variable_ex_U.In1;/ *输出港:“< Root > /着干活”* / local_variable_ex_Y。着干活= local_variable_ex_B.G1;}/ *开关:< Root > /切换* /
启用本地块输出和生成代码
选择配置参数>信号存储重用参数。的信号存储重用使优化后参数:
启用本地块输出
重用本地块输出
消除多余的局部变量(表达式折叠)
清晰的重用本地块输出和消除多余的局部变量(表达式折叠)。
阶跃函数生成代码并查看模型。有三个局部变量在模型中阶跃函数,因为你选择了优化参数启用本地块输出。的局部变量
rtb_G2
和rtb_G1
的输出获得块。的局部变量rtb_Switch
持有的输出开关块。
/ *模型阶跃函数* /空白local_variable_ex_step (void) {real_T rtb_Switch;real_T rtb_G2;real_T rtb_G1;/ *开关:“< Root > /开关”包含:*尺寸:“< Root > / In1”如果(local_variable_ex_U * /。In1 > = 0.0){/ *获得:“< Root > / G2”* / rtb_G2 = 2.0 * local_variable_ex_U.In1;rtb_Switch = rtb_G2;其他}{/ *获得:“< Root > / G1”* / rtb_G1 = 3.0 * local_variable_ex_U.In1;rtb_Switch = rtb_G1;}/ *开关:“< Root > /开关”* / / *外港:< Root > /着干活的* / local_variable_ex_Y。着干活= rtb_Switch;
本地块输出和生成代码重用
选择配置参数>重用本地块输出参数。
生成的代码。在
local_variable_ex.c
节中,视图模型的阶跃函数。有一个局部变量,rtb_G2
,代码生成器使用三次。
/ *模型阶跃函数* /空白local_variable_ex_step (void) {real_T rtb_G2;/ *开关:“< Root > /开关”包含:*尺寸:“< Root > / In1”如果(local_variable_ex_U * /。In1 > = 0.0){/ *获得:“< Root > / G2”* / rtb_G2 = 2.0 * local_variable_ex_U.In1;其他}{/ *获得:“< Root > / G1”* / rtb_G2 = 3.0 * local_variable_ex_U.In1;}/ *开关:“< Root > /开关”* / / *外港:< Root > /着干活的* / local_variable_ex_Y。着干活= rtb_G2;
额外的临时变量rtb_Switch
和相关的数据复制生成的代码。