主要内容

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

指定将表达式折叠成单个表达式

模型配置窗格: 代码生成 / 优化

描述

消除多余的局部变量(表达式折叠) 参数指定是否将模块计算折叠成单个表达式,而不是为模型中的每个模块生成单独的代码语句和存储声明。

表达式折叠会优化代码,以最小化模块输出处中间结果的计算以及这些结果在临时缓冲区或变量中的存储。表达式折叠可提高生成代码的效率,经常能达到与手动优化代码相当的结果。在许多情况下,整个模型计算组会折叠成单行高度优化的代码。

您可以在您自己的内联 S-Function 模块中使用表达式折叠。有关详细信息,请参阅S-Functions That Support Expression Folding

类别:优化

依赖项

此参数由信号存储重用启用。

设置

on (默认) | off
On
  • 启用表达式折叠。

  • 消除局部变量,将信息合并到主代码语句中。

  • 提高代码可读性和效率。

Off

禁用表达式折叠。

示例

全部展开

此示例说明如何生成使用表达式折叠的代码。

假设有以下示例模型。两个输入通向两个 Gain 模块,这两个模块为 Product 模块提供输入。

Model containing two Gain blocks that lead to a Product block.

在关闭表达式折叠的情况下,在 explfld.c 文件中,代码生成器会生成以下代码。

/* Model step function */
void exprfld_step(void)
{
  /* Gain: '<Root>/Gain' incorporates:
   *  Inport: '<Root>/In1'
   */
  exprfld_B.S1 = exprfld_P.Gain_Gain * exprfld_U.i1;
 
  /* Gain: '<Root>/Gain1' incorporates:
   *  Inport: '<Root>/In2'
   */
  exprfld_B.S2 = exprfld_P.Gain1_Gain * exprfld_U.i2;
 
  /* Outport: '<Root>/Out1' incorporates:
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = exprfld_B.S1 * exprfld_B.S2;
}

两个 Gain 模块都有单独的代码语句。在最终输出之前,这些代码语句会计算 Gain 模块的临时结果。

为模型启用表达式折叠,然后重新生成代码。在启用表达式折叠的情况下,代码生成器会生成单行输出计算,如 expfld.c 文件中所示。生成的注释记录出现在表达式中的模块参数。

/* Model step function */
void exprfld_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Gain: '<Root>/Gain1'
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = 
     exprfld_P.Gain_Gain * 
     exprfld_U.i1 * 
     (exprfld_P.Gain1_Gain * exprfld_U.i2);
}

推荐的设置

应用情形设置
调试Off
可追溯性不影响仿真或开发过程
对于生产代码生成,为 Off
效率On
安全预警无影响

编程用法

参数: ExpressionFolding
类型:字符向量
值:'on' | 'off'
默认值:'on'

版本历史记录

在 R2006a 之前推出

另请参阅