Main Content

在生成的代码中重用全局模块输出

减少 ROM 和 RAM 的消耗量和数据副本,提高生成代码的执行速度。通过选择模型配置参数重用全局模块输出,将代码生成器配置为重用全局变量。

示例模型

在命令行窗口中,打开 GlobalReuse 模型。

model='GlobalReuse';
open_system('GlobalReuse')

生成代码但不进行优化

  1. 在“配置参数”对话框中,确认信号存储重用处于选中状态。

  2. 代码生成 > 报告窗格上,确认生成静态代码度量处于选中状态。

  3. 清除重用全局模块输出,然后点击应用。您也可以通过编程方式设置此参数:

set_param(model,'GlobalBufferReuse', 'off');

Ctrl+B 生成代码。

slbuild(model);
### Starting build procedure for: GlobalReuse
### Successful completion of build procedure for: GlobalReuse

Build Summary

Top model targets built:

Model        Action                        Rebuild Reason                                    
=============================================================================================
GlobalReuse  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 18.781s

查看生成的代码而不进行优化。这是 GlobalReuse.c 的一部分。

cfile = fullfile('GlobalReuse_ert_rtw','GlobalReuse.c');
coder.example.extractLines(cfile,'/* Model step','/* Model initialize',1, 0);
/* Model step function */
void GlobalReuse_step(void)
{
  /* Sum: '<Root>/Sum' incorporates:
   *  Delay: '<Root>/Delay'
   *  Inport: '<Root>/In1'
   */
  rtDW.Delay_DSTATE += rtU.In1;

  /* Outport: '<Root>/Out1' incorporates:
   *  Delay: '<Root>/Delay'
   */
  rtY.Out1 = rtDW.Delay_DSTATE;
}

生成的代码包含全局变量 rtDW.Delay_DSTATE 的一个数据副本。打开静态代码度量报告。对全局变量的读写总数为 8。总大小为 32 字节。

生成代码并进行优化

在“配置参数”对话框中,选择重用全局模块输出,然后点击应用。您也可以通过编程方式设置此参数:

set_param(model,'GlobalBufferReuse', 'on');

生成代码。

slbuild(model);
### Starting build procedure for: GlobalReuse
### Successful completion of build procedure for: GlobalReuse

Build Summary

Top model targets built:

Model        Action                        Rebuild Reason                   
============================================================================
GlobalReuse  Code generated and compiled.  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 15.175s

查看优化后的生成代码。这是 GlobalReuse.c 的一部分。

cfile = fullfile('GlobalReuse_ert_rtw','GlobalReuse.c');
coder.example.extractLines(cfile,'/* Model step','/* Model initialize',1, 0);
/* Model step function */
void GlobalReuse_step(void)
{
  /* Sum: '<Root>/Sum' incorporates:
   *  Delay: '<Root>/Delay'
   *  Inport: '<Root>/In1'
   */
  rtY.Out1 += rtU.In1;
}

代码生成器消除了一个数据副本,将两个语句减少为一个语句,并将三个全局变量减少为两个全局变量。

打开静态代码度量报告。对于全局变量,此优化将对全局变量的读写总数从 8 减少到 5,总大小从 32 字节减少到 24 字节。

bdclose(model)

另请参阅

相关主题