主要内容

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

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

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

功能依赖关系

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

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

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

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

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

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

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

  3. 在“子系统参数”对话框中,验证这一点将其视为原子单位被选中。选择该参数后,在代码生成选项卡,函数包装参数可用。

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

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

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

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

  8. 生成代码。

    #include "SS1.h" /*包含全局数据的模型头文件*/ #include "rtwdemo_atomic.h" #include "rtwdemo_atomic_private.h" /*输出原子系统:'<根>/SS1' */ real_T myfun(DW_myfun_T *localDW) {/* DiscreteIntegrator: '/Integrator' */返回localDW->Integrator_DSTATE;} /*更新原子系统:'<根>/SS1' */ void myfun_Update(real_T rtu_In1, DW_myfun_T *localDW){/*更新离散积分系统:'/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){/*输出:'<根>/Out1'合并:*离散积分器:'/积分器' */ rtwdemo_atomic_Y。Out1 = rtwdemo_atomic_DW.Integrator_DSTATE;} /*更新原子系统:'<根>/SS1' */ void myfun_Update(void){/*更新离散Integrator: '/Integrator' */ rtwdemo_atomic_DW. '积分状态+= rtwdemo_atomic_B.Sum;}

    不可重用函数myfun通过全局数据结构传递输入和状态rtwdemo_atomic_Y而且rtwdemo_atomic_DW

相关的话题