主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

将子系统代码生成为单独的函数和文件

您可以配置原子子系统来将代码生成到一个单独的函数和文件。这使得代码更加模块化,并使您能够对单个子系统的代码进行单元测试。

函数打包 Subsystem 模块参数有两个设置会导致子系统将代码生成为单独的函数。可重用函数选项生成将 I/O、状态和参数作为函数参量传递的函数。不可重用函数选项生成将 I/O、状态和参数作为函数参量和全局数据结构体的组合传递的函数。

子系统函数依赖关系

在为子系统生成代码时,代码可以引用模型的全局数据结构体,即使子系统函数代码位于单独的文件中也是如此。每个子系统代码文件包含 include 指令和描述依赖关系的注释。代码生成器检查循环文件依赖关系,并在编译时生成有关它们的警告。有关代码生成器如何打包代码的描述,请参阅Manage Build Process File Dependencies

要生成独立于为父模型生成的代码的子系统函数代码,请将子系统放置在库中并将其配置为可重用子系统,如Generate Reusable Code from Library Subsystems Shared Across Models中所述。

如果您有 Embedded Coder®,可以为由具有不同函数接口的可重用子系统组成的库生成代码。有关详细信息,请参阅:

将子系统生成为可重用函数

1.打开具有子系统的模型,例如 SubsystemAtomic

SubsystemAtomic

rtwdemo_atomic.png

如果您使用的是 Embedded Coder,请从 C 代码选项卡上点击查看代码以打开代码视图编辑器。

2.右键点击 Subsystem 模块。从上下文菜单中选择模块参数(子系统)

3.在“子系统参数”对话框中,验证视为原子单元处于选中状态。在该参数处于选中状态下,代码生成选项卡上的函数打包参数可用。

4.点击代码生成选项卡,并从函数打包参数中选择 Reusable function。这将启用两个参数:

5.将文件名选项参数设置为 Use subsystem name

6.点击应用并关闭对话框。

7.如果您使用的是 Embedded Coder,请打开“配置参数”对话框。验证模型配置参数文件打包格式 (Embedded Coder)设置为“模块化”。

8.生成代码。

#include "SS1.h"

/* Include model header file for global data */
#include "SubsystemAtomic.h"
#include "SubsystemAtomic_private.h"

/* Outputs for atomic system: '<Root>/SS1' */
real_T myfun(DW_myfun_T *localDW)
{
  /* DiscreteIntegrator: '<S1>/Integrator' */
  return localDW->Integrator_DSTATE;
}

/* Update for atomic system: '<Root>/SS1' */
void myfun_Update(real_T rtu_In1, DW_myfun_T *localDW)
{
  /* Update for DiscreteIntegrator: '<S1>/Integrator' */
  localDW->Integrator_DSTATE += rtu_In1;
}

可重用函数 myfun 将输入和状态作为参量传递给子系统函数。

有关详细信息,请参阅Generate Reentrant Code from SubsystemsGenerate Reusable Code from Library Subsystems Shared Across Models

将子系统生成为不可重用函数

1.打开具有子系统的模型,例如 SubsystemAtomic

SubsystemAtomic

rtwdemo_atomic.png

如果您使用的是 Embedded Coder,请从 C 代码选项卡上点击查看代码以打开代码视图编辑器。

2.右键点击 Subsystem 模块。从上下文菜单中选择模块参数(子系统)

3.在“子系统参数”对话框中,验证视为原子单元处于选中状态。在该参数处于选中状态下,代码生成选项卡上的函数打包参数可用。

4.点击代码生成选项卡,并从函数打包参数中选择 Nonreusable function。这将启用两个参数:

5.将文件名选项参数设置为 Use subsystem name

6.点击应用并关闭对话框。

7.如果您使用的是 Embedded Coder,请打开“配置参数”对话框。验证模型配置参数文件打包格式 (Embedded Coder)设置为“模块化”。

8.生成代码。

#include "SS1.h"

/* Include model header file for global data */
#include "SubsystemAtomic.h"
#include "SubsystemAtomic_private.h"

/* Outputs for atomic system: '<Root>/SS1' */
void myfun(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  DiscreteIntegrator: '<S1>/Integrator'
   */
  SubsystemAtomic_Y.Out1 = SubsystemAtomic_DW.Integrator_DSTATE;
}

/* Update for atomic system: '<Root>/SS1' */
void myfun_Update(void)
{
  /* Update for DiscreteIntegrator: '<S1>/Integrator' */
  SubsystemAtomic_DW.Integrator_DSTATE += SubsystemAtomic_B.Sum;
}

不可重用函数 myfun 通过全局数据结构体 SubsystemAtomic_YSubsystemAtomic_DW 传递输入和状态。

另请参阅

主题