主要内容

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

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

函数包装子系统块参数有两个设置,使子系统作为单独的函数生成代码。的可重用的功能option生成一个函数,该函数将I/O、状态和形参作为函数参数传递。的那种一次性的功能option生成一个函数,该函数将I/O、状态和参数作为函数参数和全局数据结构的组合传递。

子系统功能的依赖

在为子系统生成代码时,代码可以引用模型的全局数据结构,即使子系统函数代码位于单独的文件中。每个子系统代码文件包含包括描述依赖关系的指令和注释。代码生成器检查循环文件依赖关系,并在构建时生成有关它们的警告。有关代码生成器如何打包代码的描述,请参见管理构建过程文件依赖关系

要生成独立于为父模型生成的代码的子系统函数代码,请将子系统放在库中并将其配置为可重用子系统,如中所述从跨模型共享的库子系统生成可重用的代码

如果你有嵌入式编码器®,您可以为由具有不同函数接口的可重用子系统组成的库生成代码。有关更多信息,请参见基于库的可重用库子系统代码生成(嵌入式编码)

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

  1. 打开一个带有子系统的模型,例如rtwdemo_atomic

    如果您正在使用嵌入式编码器,则从C代码选项卡上,单击视图代码打开代码视图编辑器。

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

  3. 在“子系统参数”对话框中验证作为原子单位对待被选中。选择了该参数后,在代码生成选项卡,函数包装参数是可用的。

  4. 单击代码生成选项卡并选择可重用的功能函数包装参数。这将启用两个参数:

  5. 设置文件名称选项参数使用子系统名称

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

  7. 如果正在使用嵌入式编码器,请打开“配置参数”对话框。验证模型配置参数文件的包装格式(嵌入式编码)被设置为模块化

  8. 生成的代码。

    #include "SS1.h" /*包含全局数据的模型头文件*/ #include "rtwdemo_atomic_private.h" /*原子系统的输出:'<根>/SS1' */ real_T myfun(DW_myfun_T *localDW) {/* discrete teintegrator: '/Integrator' */ return localDW->Integrator_DSTATE;} /* Update for atomic system: '/SS1' */ void myfun_Update(real_T rtu_In1, DW_myfun_T *localDW) {/* Update for discrete teintegrator: '/Integrator' */ localDW->Integrator_DSTATE += rtu_In1;}

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

有关更多信息,请参见从子系统生成可重入代码而且从跨模型共享的库子系统生成可重用的代码

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

  1. 打开一个带有子系统的模型,例如rtwdemo_atomic

    如果您正在使用嵌入式编码器,则从C代码选项卡上,单击视图代码打开代码视图编辑器。

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

  3. 在“子系统参数”对话框中验证作为原子单位对待被选中。选择了该参数后,在代码生成选项卡,函数包装参数是可用的。

  4. 单击代码生成选项卡并选择那种一次性的功能函数包装参数。这将启用两个参数:

  5. 设置文件名称选项参数使用子系统名称

    如果您正在使用嵌入式编码器,请验证函数接口参数设置为void_void.有关更多信息,请参见生成可预测的函数接口以匹配图形块接口(嵌入式编码)

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

  7. 如果正在使用嵌入式编码器,请打开“配置参数”对话框。验证模型配置参数文件的包装格式(嵌入式编码)被设置为模块化

  8. 生成的代码。

    #include "SS1.h" /*包含全局数据的模型头文件*/ #include "rtwdemo_atomic.h" #include "rtwdemo_atomic_private.h" /*原子系统的输出:'<根>/SS1' */ void myfun(void) {/* Outport: '<根>/Out1'合并:* discrete teintegrator: '/Integrator' */ rtwdemo_atomic_Y。着干活= rtwdemo_atomic_DW.Integrator_DSTATE;} /* Update for atomic system: '/SS1' */ void myfun_Update(void) {/* Update for discrete teintegrator: '/Integrator' */ rtwdemo_atomic_DW.} /* Update for atomic system: '/SS1' */ void myfun_Update(void) {/*Integrator_DSTATE + = rtwdemo_atomic_B.Sum;}

    那种一次性的功能myfun通过全局数据结构传入输入和状态rtwdemo_atomic_Y而且rtwdemo_atomic_DW

相关的话题

Baidu
map