主要内容

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

这个例子显示了如何指定块输出为局部变量。代码生成器生成的代码可以重用这些局部变量。声明块输出作为局部变量保存罗消费。重用本地变量保存内存消耗,减少数据拷贝,并提高执行速度。

示例模型

  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

/ *模型阶跃函数* /空白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 > /切换* /

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

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

    • 启用本地块输出

    • 重用本地块输出

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

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

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

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

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

  2. 生成的代码。在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和相关的数据复制生成的代码。

另请参阅

相关的话题