主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

减少不可重用的子系统函数中的全局变量

全局变量会增加内存需求并降低执行速度。为了减少不可重用子系统的全局 RAM,您可以生成一个通过参量而不是全局变量传递数据的函数接口。Subsystem 模块参数函数接口提供了此选项。要比较函数接口选项的输出,请为具有 void-void 接口的子系统生成一个函数,然后生成一个带有参量的函数。

生成 void-void 函数

默认情况下,当您将 Subsystem 模块配置为不可重用函数时,它会生成 void-void 接口。

  1. 打开示例模型 RollAxisAutopilot

    openExample('RollAxisAutopilot');

  2. 右键点击子系统 RollAngleReference。从列表中选择模块参数(子系统)

  3. 在“模块参数”对话框中,确认选中了视为原子单元复选框。

  4. 点击代码生成选项卡并将代码接口打包参数设置为不可重用函数

  5. 函数接口参数已设置为 void_void

  6. 点击应用确定

  7. 对于其他子系统 HeadingModeBasicRollMode,重复步骤 2-6。

  8. RollAxisAutopilot 生成代码和静态代码度量报告。该模型配置为生成代码生成报告并自动打开报告。有关详细信息,请参阅Generate Static Code Metrics Report for Simulink Model

在代码生成报告中,在 RollAxisAutopilot.c 中,子系统 RollAngleReference 的生成代码包含一个 void-void 函数定义:

 static void RollAngleReference(void)
 {
  ... 
 }
在静态代码度量报告中,导航到全局变量。使用 void_void 选项,全局变量的字节数为 47

接下来,使用 Allow arguments (Optimized) 选项生成相同的函数来比较结果。

生成带参量的函数

为了减少全局 RAM,提高 ROM 使用率和执行速度,生成一个允许参量的函数:

  1. 打开 RollAngleReference 的 Subsystem 模块参数对话框。

  2. 点击代码生成选项卡。将函数接口参数设置为允许参量 (优化)

  3. 点击应用确定

  4. 对于其他子系统 HeadingModeBasicRollMode,重复步骤 2 和 3。

  5. RollAxisAutopilot 生成代码和静态代码度量报告。

在代码生成报告中,在 RollAxisAutopilot.c 中,子系统 RollAngleReference 的生成代码现在具有参量:

static real32_T RollAngleReference(real32_T rtu_Phi,... 
                                   boolean_T rtu_AP_Eng,...
                                   real32_T rtu_Turn_Knob)
 {
 ... 
 }
在静态代码度量报告中,导航到全局变量。设置 Allow arguments 选项后,全局变量的总字节数现在为 39 字节。

在某些情况下,生成优化代码时,代码生成器可能不会生成具有参量的函数。要生成具有参量的可预测函数接口,请将函数接口设置为允许参量 (匹配图形接口)

另请参阅

主题