主要内容

管理构建过程文件依赖项

生成代码大小的一个重要控制是管理包含的文件(依赖项)的数量和大小。为了减少生成代码所需的系统头文件和生成头文件的数量,理解构建过程生成的依赖关系以及导致依赖关系的条件是很有帮助的。

生成的源文件和头文件之间的依赖关系如图所示。箭头从一个文件指向它所包含的文件。其他依赖关系也存在,例如在Simulink上金宝app®头文件tmwtypes.h而且simstruc_types.h,加上C或c++库文件。该图仅映射在构建文件夹中生成的那些文件之间的包含关系。这些文件可以引用位于代码生成文件夹中的实用程序和模型引用代码。有关构建过程创建的文件夹和文件的详细信息,请参见管理构建过程文件夹而且管理构建过程文件

这两个表确定了控制为GRT和ERT目标创建依赖文件的条件。要管理与构建相关的依赖项,请考虑如何将这些条件应用到您的模型和代码生成过程。然后,配置模型参数和代码生成选项来管理构建过程文件依赖关系。

由于使用基于ert的系统目标文件生成的代码的文件打包选项不同,文件依赖关系与使用基于grt的系统目标文件生成的代码的文件打包略有不同。看到管理生成代码模块的文件打包(嵌入式编码)

父系统头文件(模型.h)包含子子系统头文件(子系统.h).在更分层的模型中,子系统类似地在模型层次结构中包含它们的子头文件。因此,子系统能够递归地查看到它们的子子系统和根系统,因为每子系统.c子系统. cpp包括模型.h而且模型_private.h

图中为文件模型.h模型_private.h,子系统.h依赖于头文件rtwtypes.h.如果您使用的系统目标文件不是基于ERT系统目标文件的,那么您所生成的源文件可能具有附加的依赖关系tmwtypes.h而且simstruc_types.h

系统头文件

系统头文件使函数声明、类型定义和宏定义可用于遗留代码或外部代码。一些代码生成场景需要包含特定于代码生成器产品的头文件。

代码生成器包括一些用于广泛定义的情况的系统头文件。例如,生成的代码包含< stddef.h >当模型包含需要此头文件的实用程序函数时。这种方法有助于识别头文件依赖关系:

  1. 设定模型配置参数共享代码放置“共享位置”然后建立模型。代码生成器将实用程序函数放在__sharedutils文件夹中。

  2. 使用文件查找实用程序(例如,grep实用程序)来搜索.c而且.h文件__sharedutils文件夹# include.搜索结果列出了具有头文件依赖关系的实用程序。

  3. 使用此信息识别要从模型中删除的实用程序,并减少生成代码中的头文件依赖关系。

有关更多信息,请参见为定点函数生成共享实用程序代码

系统头文件 GRT或ERT系统目标文件的描述和包含条件

< math.h >

定义数学常数

grt生成的代码不包括此文件。

当用于求解器的代码符合模型配置时,ert生成的代码包括此文件停止时间和:

  • 您的模型配置启用了参数MAT-file日志.看到MAT-file日志

  • 您的模型配置启用了参数外部模式

< float.h >

提供浮点数学函数

当模型包含浮点数学函数时,grt生成的代码将包含此文件。

当模型包含浮点数学函数时,ert生成的代码包含此文件,除非代码替换库条目覆盖了该函数。有关更多信息,请参见选择一个代码替换库

< stddef.h >

定义零

当您的模型包含需要此文件的实用程序函数时,GRT和ert生成的代码将包含此文件。

< stdio . h >

提供文件I/O功能

当您的模型包含到文件块。

当下列情况之一时,ert生成的代码包含此文件:

< stdlib.h >

的整数版本等实用函数div ()而且abs ()

grt生成的代码包括该文件时:

  • 您的模型包括一个状态流®图表。

  • 您的模型包括配置的数学功能块国防部()快速眼动()的调用div ()

当下列情况之一时,ert生成的代码包含此文件:

  • 您的模型包括一个状态流程图,您可以选择模型配置参数金宝app支持:浮点数

  • 您的模型包括配置的数学功能块国防部()快速眼动()的调用div ()

< string.h >

提供内存功能,如memset ()而且memcpy ()

当模型初始化代码调用时,grt生成的代码包含此文件memset ()

当块或模型初始化代码调用时,ert生成的代码包含此文件memcpy ()memset ()

对于相关块的列表,在命令窗口中输入:

showblockdatatypetable

寻找带有N2音符的方块。忽略对memset ()从模型初始化代码中,选择模型配置参数删除根级I/O零初始化而且删除内部数据零初始化

代码生成器头文件

表中生成的头文件的依赖关系应用于系统目标文件grt.tlc而且ert.tlc.从这些基本系统目标文件派生的系统目标文件可以具有额外的头依赖项。从块集、嵌入式目标和自定义s函数生成块的代码可以引入额外的头依赖项。

头文件 GRT或ERT系统目标文件的描述和包含条件

内装式_typeid_types.h

定义与内置数据类型对应的枚举类型

当一个或多个条件适用时,GRT和ert生成的代码包括此文件:

  • 您的模型包含一个使用消息的状态流程图。

  • 您的模型配置使:MAT-file日志.看到MAT-file日志

  • 您的模型配置选择C API选项代码生成>接口

dt_info.h

为外部模式定义数据结构

当模型配置启用外部模式时,GRT和ert生成的代码包括此文件。

ext_work.h

定义外部模式函数

当模型配置启用外部模式时,GRT和ert生成的代码包括此文件。

fixedpoint.h

为非内联s函数提供定点支持金宝app

grt生成的代码包括这个文件。

当下列情况之一时,ert生成的代码包含此文件:

  • 您的模型使用非内联s函数。

  • 您的模型配置选择参数经典调用接口

模型_reference_types.h

包含计时桥的类型定义

在构建参考模型或构建包含模型块的模型时,GRT和ert生成的代码包括此文件。

模型_types.h

定义特定于模型的数据类型

GRT和ert生成的代码包括这个文件。

多字_types.h

包含多字范围的数据类型及其字大小的块的类型定义

当一个或多个条件适用时,GRT和ert生成的代码包括此文件:

  • 您的模型使用多字数据类型。

  • 您的模型配置选择参数MAT-file日志.看到MAT-file日志

  • 您的模型配置选择外部模式

对于使用多字数据类型的模型,如果数据类型的长度大于上次为其生成代码的模型的数据类型的长度,则代码生成器将覆盖文件。为了避免覆盖这个文件,设置:

  • MultiwordTypeDef“用户定义”

  • MultiwordLength到您的模型所要求的最大长度。

rtGetInf.h

rtGetNaN.h

rt_nonfinite.h

金宝app支持非有限数

当一个或多个条件适用时,grt生成的代码包括这个文件:

  • 你的模型包含s函数。

  • 生成的代码需要非有限数。

  • 您的模型配置选择参数MAT-file日志.看到MAT-file日志

  • 您的模型配置选择参数经典调用接口

当一个或多个条件适用时,ert生成的代码包括此文件:

  • 你的模型包含s函数。

  • 生成的代码需要非有限数。

  • 您的模型配置选择参数MAT-file日志.看到MAT-file日志

rt_defines.h

包含特殊数学常数的类型定义(如π和e),并定义UNUSED_PARAMETER

GRT和ert生成的代码包括此文件时:

  • 生成的代码需要一个数学常数定义。

  • 函数体不访问所需的模型函数参数。

rt_logging.h

金宝app支持mat文件日志记录,包括:

Rtwtypes.h builtin_typeid_types.h multiword_types.h rt_mxclassid.h rtw_matlogging.h

grt生成的代码包括这个文件。

当您建模配置选择参数时,ert生成的代码包括此文件MAT-file日志.看到MAT-file日志

rt_mxclassid.h

定义了mxArray类ID枚举

当代码包含此文件时,GRT和ert生成的代码包含此文件rt_logging.c

rtw_continuous.h

金宝app支持连续时间

grt生成的代码包含此文件时,代码包含simstruc_types.h

当模型配置选择参数时,ert生成的代码包括此文件金宝app支持:连续时间当代码还没有包含simstruc.h

rtw_extmode.h

金宝app支持外部模式

grt生成的代码包含此文件时,代码包含simstruc_types.h

当您的模型配置选择外部模式时,以及当代码尚未包含此文件时,ert生成的代码包含此文件simstruc.h

rtw_matlogging.h

金宝app支持mat文件日志记录

grt生成的代码包含此文件时,代码包含simstruc_types.h而且rt_logging.h

ert生成的代码包含此文件时,代码包含rt_logging.h

rtw_solver.h

金宝app支持连续状态

grt生成的代码包含此文件时,代码包含simstruc_types.h

当模型配置选择参数时,ert生成的代码包括此文件金宝app支持:连续时间当代码还没有包含simstruc.h

rtwtypes.h

定义代码生成器数据类型

grt生成的代码包括这个文件。使用详细版本的文件,其中包括tmwtypes.h而且simstruc_types.h.看到simstruc_types.h的依赖关系。

ert生成的代码包括这个文件。看到rtwtypes.h

当你启用(之前禁用)支持以下功能时,代码生成器会覆盖之前生成的rtwtypes.h:金宝app

  • 复数(金宝appSupportComplex设置为“上”).

  • 非内联s函数(金宝appSupportNonInlinedSFcns设置为“上”

避免重写rtwtypes.h,你可以:

  • 为您的模型指定对金宝app复杂数据类型的支持,即使模型当前不使用复杂数据类型。

  • 禁用对非内联s函金宝app数的支持。在这种情况下,使用非内联的s函数会产生错误。为了避免错误,将s函数转换为内联s函数。有关更多信息,请参见内联S-Functions(嵌入式编码)

simstruc.h

金宝app类型的非内联s函数Simstruct定义;还包括:

limit .h string.h tmwtypes.h simstruc_types.h

grt生成的代码包括这个文件。

当下列情况之一时,ert生成的代码包含此文件:

  • 您的模型使用非内联s函数。

  • 您的模型配置选择参数经典调用接口

simstruc_types.h

提供生成的代码使用的定义,并包括头文件:

Rtw_matlogging.h rtw_extmode.h rtw_continue .h rtw_solver.h sysran_types.h

grt生成的代码包含此文件时,代码包含rtwtypes.h

ert生成的代码不包括此文件。导,rtwtypes.h包含定义和模型.h包含头文件。

sysran_types.h

金宝app支持外部模式

grt生成的代码包含此文件时,代码包含simstruc_types.h

当您的模型配置选择外部模式时,以及当代码尚未包含此文件时,ert生成的代码包含此文件simstruc.h

zero_crossing_types.h

包含具有触发子系统的模型的过零定义,其中触发器为上升、下降或任意一种。由触发信号的数据类型决定,仅在模型需要时才生成文件。例如,如果触发信号的数据类型为布尔型,则不需要进行过零检测。

GRT生成的代码不包括GRT代码生成目标的此文件。

当模型具有有条件执行的子系统(触发器使用零交叉检测)时,ert生成的代码包括此文件。

的内容zero_crossing_types.h总是一样的。

相关的话题