主要内容

在生成的代码中启用和重用本地块输出

这个例子展示了如何将块输出指定为局部变量。代码生成器可以在生成的代码中重用这些局部变量。将块输出声明为局部变量可以节省ROM消耗。重用局部变量可以节省内存消耗,减少数据副本,并提高执行速度。

示例模型

  1. 使用轮廓尺寸外港获得,开关块来创建以下模型。在这个例子中,模型被命名local_variable_ex

  2. G2,打开增益块参数对话框。输入值为2

  3. G1,输入值为3.

  4. 开关块,打开块参数对话框。为传递第一个输入的标准参数,选择u2 > =阈值

生成没有优化的代码

  1. 打开“模型配置参数”对话框。选择解算器窗格。为类型参数,选择固定步

  2. 清除配置参数>信号存储重用参数。

  3. 选择代码生成>报告窗格并选择创建代码生成报告

  4. 选择代码生成窗格。选择只生成代码,然后,在模型窗口中,按Ctrl + B.代码生成完成后,将出现HTML代码生成报告。

  5. 在代码生成报告中,选择local_variable_ex.c节并查看模型阶跃函数。增益块输出是全局变量local_variable_ex_B。G2local_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' */

启用本地块输出和生成代码

  1. 选择配置参数>信号存储重用参数。的信号存储重用启用以下优化参数:

    • 启用本地块输出

    • 重用本地块输出

    • 消除多余的局部变量(表达式折叠)

  2. 清晰的重用本地块输出消除多余的局部变量(表达式折叠)

  3. 生成代码并查看模型步骤函数。模型阶跃函数中有三个局部变量,因为您选择了优化参数启用本地块输出.局部变量rtb_G2rtb_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;

重用本地块输出并生成代码

  1. 选择配置参数>重用本地块输出参数。

  2. 生成的代码。在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关联的数据副本不在生成的代码中。

另请参阅

相关的话题