文档

在生成的文件中控制全局数据定义和声明的位置

生成的代码可以创建标准的全局结构变量,其字段表示模型中的信号、状态和参数数据。使用存储类,可以将数据配置为在代码中作为单独的全局变量或自定义全局结构出现。有关标准数据结构的信息,请参见生成的代码如何存储内部信号,状态和参数数据而且生成的代码如何与环境交换数据.有关存储类的信息,请参见为控制生成代码中的数据表示选择存储类

您可以控制变量定义和声明的文件位置。使用表格中的信息。

目标 细节和技巧
生成一个外部代码可以使用的变量

应用具有导出数据作用域的存储类,例如ExportToFile.生成的代码在您的代码可以包含的文件中声明变量(# include).

要生成走读生声明模型.h,考虑使用存储类ExportedGlobal

或者,要将声明放在可以指定名称的文件中,请选择以下技术之一:

  • 若要在默认情况下将多个变量声明聚合到一个或多个特定头文件中,请应用存储类,例如ExportToFile使用“代码映射编辑器”将数据转换为一个类别。当您向模型添加块和信号时,新的数据项将在您指定的文件中声明。

  • 若要显式指定单个数据项的位置,请直接应用存储类,例如ExportToFile方法指定头文件名头文件自定义属性。要在列表中配置可以搜索、排序和筛选的多个数据项,请使用模型数据编辑器(参见使用模型数据编辑器配置数据属性(金宝app模型))。

看到外部调用代码与生成代码之间的数据交换

生成使用外部代码定义的变量的代码

应用具有导入数据作用域的存储类,例如ImportFromFile,到表示该变量的模型中的数据元素。然后,生成的代码不定义变量,而是包含(# include)一个可以指定其名称的外部头文件。生成的算法(例如,模型)一步函数)对变量进行读写。

或者,如果没有外部声明头文件,或者不希望生成的代码包含头文件,则应用存储类ImportedExtern.然后,生成的代码在模型_private.h

看到外部调用代码与生成代码之间的数据交换

  • 通过创建多个更小的文件来减小生成文件的大小

  • 将数据组织到不同的文件中,使生成的代码更容易理解

取决于的设置配置参数>文件打包格式,生成的文件如模型.c而且模型_data.c可以包含多个全局变量的定义。相应的头文件可以包含许多声明。

  • 为了使模型.c更小,考虑设置文件打包格式模块化紧凑型(有单独的数据文件).然后,生成的代码定义了表示可调和常量参数数据的标准结构模型_data.c而不是模型.c

  • 默认情况下,要在特定文件中放置不同类别的数据(例如,外部参数、块状态和内部信号),请使用代码映射编辑器。对于每一类数据,使用存储类,例如ExportToFile并指定自定义属性头文件.看到配置数据的默认代码生成

  • 要精确控制数据的文件位置,请应用存储类,例如ExportToFile到各个数据项。使用存储类的自定义属性,例如定义文件而且头文件,以指定每个数据项的文件位置。要一次配置多个数据元素,您可以使用模型数据编辑器。示例请参见信号数据的定义和声明

将多个文件合并为单个文件

  • 考虑设置模型配置参数文件打包格式紧凑的.然后,代码生成器不创建模型_data.c文件。相反,存储可调参数和常量参数数据的标准结构的定义出现在模型.c

  • 当您应用诸如ExportToFile对于数据元素,保留自定义属性定义文件而且头文件空白,默认值。另外,设置模型配置参数数据定义源文件中定义的数据.然后,数据定义出现在模型.c使用其他全局数据的定义。

将数据定义与函数定义分开

默认情况下,为模型或子系统定义入口点函数的生成文件也为该模型或子系统定义数据。当您频繁地更改数据,特别是可调参数的初始值时,更改的源代码文件可能阻碍验证并使更改管理更加困难。将数据从函数中分离出来:

  • 考虑设置模型配置参数文件打包格式设置为导致生成独立数据文件的值模型_data.c.然后,存储可调参数和常量参数数据的标准结构的定义出现在这个文件中,而不是在文件中模型.c

  • 应用存储类,例如ExportToFile通过使用代码映射编辑器和模型数据编辑器到数据元素。使用存储类的自定义属性,例如定义文件而且头文件,以指定文件的位置。有关更多信息,请参见配置数据的默认代码生成而且向数据元素应用内置和自定义存储类

将数据定义隔离在单独的文件中,以便进行基于组件的、面向团队的模型开发

看到组织数据以支持基于组件的、面向团队金宝app的模型开发

变量控制参数的集合定义(#定义宏)到单个头文件中

如在为可变系统生成预处理器条件,一个变量控制参数是一个参数对象,如金宝app仿真软件。参数.应用一个存储类,使对象作为宏出现在生成的代码中。要控制文件的位置,请选择以下技术之一:

  • 对于使用存储类的每个变体控件参数定义,设置头文件属性设置为相同的值。要在可以搜索、排序和筛选的列表中配置这些对象,您可以使用Model Data Editor参数选项卡。示例请参见在同一个头文件中生成不同的控制宏

  • 创建一个或多个表示变量控制参数的存储类。在自定义存储类设计器中,可以设置头文件的值,该值应用于使用存储类的所有变量控件参数。使用这种技术,您不需要为每个变体控件参数手动指定头文件。有关更多信息,请参见使用自定义存储类设计器创建存储类

组织数据以支持基于组件的、面向团队金宝app的模型开发

根据您的模型配置,数据定义可以聚集在大型生成文件中。在组件系统(子系统或引用模型)中,您可以根据组件层次结构将数据定义分离并组织到可管理的、有意义的文件中。

目标 技术

通过将数据定义与为特定组件生成的代码放在一起,建立全局数据的所有权

当您使用引用模型和原子子系统将系统划分为组件时,默认情况下,全局数据通常由为层次结构中最顶层组件生成的代码定义。全局数据包括应用存储类的参数、信号和状态(参见对单个信号、状态和参数数据元素应用存储类).

相反,您可以将全局数据定义与层次结构中的其他组件放在一起。有关涉及引用模型的示例,请参见在组件系统中建立数据所有权

  • 要将数据定义与为引用模型生成的代码放在一起,请使用内置存储类,例如ExportToFile,或在包中创建的存储类,并设置老板属性设置为引用模型的名称。

    使用老板在模型中,您必须选择模型配置参数使用数据对象的所有者来放置数据定义.此参数的默认设置为已清除,意味着代码生成器忽略您指定的设置老板

    如果只有一个引用的模型使用一个参数对象,考虑将该对象存储在该模型的模型工作区中。然后,为该模型生成的代码定义数据。您不需要指定所有者(老板)为对象。

  • 在原子子系统中,使用存储类,例如ExportToFile方法显式指定定义文件的名称定义文件自定义属性。但是,您不能将定义文件与属于子系统的源文件放在一起。相反,您指定的定义文件出现在为模型生成的文件夹中。

对于原子子系统,将子系统的标准数据结构与子系统代码放在一起

默认情况下,原子子系统的标准数据结构作为整个模型的数据结构的子结构出现。

要为子系统生成单独的数据结构,请选择使用独立数据的函数参数。然后,子系统数据出现在子系统代码定义的独立结构变量中。看到为非虚拟子系统生成模块化函数代码

指定默认位置

当您通过添加块和信号线在模型中创建数据时,默认情况下,数据定义出现在模型.c.要指定不同的默认位置,请使用以下工具和参数:

  • 模型配置参数文件打包格式.所选择的设置决定了代码生成器是否将存储可调参数和常量参数数据的标准结构放在其中模型_data.c而不是模型.c.看到文件打包格式

  • 代码映射编辑器。对于模型数据的每个类别,您可以指定一个默认存储类,它控制文件的位置。例如,应用存储类ExportToFile的数据类别,并在属性检查器中使用DefinitionFileHeaderFile,老板自定义属性来控制文件的放置。

  • 模型配置参数数据定义而且数据声明.这些配置参数指定应用存储类的数据项的默认文件位置。

    • 这些配置参数不会影响应用存储类的数据项ExportedGlobalImportedExtern,ImportedExternPointer

    • 如果应用显式地为数据元素指定定义和声明文件的存储类,则这些规范将覆盖数据定义而且数据声明配置参数。

    有关更多信息,请参见数据定义而且数据声明

  • 子系统块参数使用独立数据的函数.选择此参数时,存储子系统数据的标准结构(如DWork结构)将作为单独的结构变量出现。默认情况下,变量定义出现在定义子系统执行函数的源文件中。看到为非虚拟子系统生成模块化函数代码

覆盖单个数据项的默认位置

对于单个数据项,要覆盖默认的文件位置,请使用模型数据编辑器直接应用存储类。例如,要使数据项作为全局变量出现在生成的代码中,请应用存储类ExportToFile.然后,使用定义文件头文件自定义属性来控制文件的放置。要直接应用存储类,请参见向数据元素应用内置和自定义存储类

通过将数据项配置为防止名称冲突静态

应用C关键字静态对于全局变量,它可以通过将变量名的作用域限制到定义变量的文件来帮助您避免名称冲突,请选择以下技术之一:

  • 应用内置存储类FileScope.有关更多信息,请参见为控制生成代码中的数据表示选择存储类

  • 如果FileScope不能满足您的要求,请使用自定义存储类设计器创建自己的存储类。在设计器中,设置数据范围文件汽车

    • 文件时,数据元素在代码中作为静态全局变量。

    • 汽车,代码生成器首先尝试用函数中的局部变量表示数据元素。如果此尝试失败,代码生成器将使用静态全局变量。

    有关演示如何使用Designer创建自己的存储类的示例,请参见创建并应用存储类

你不能申请静态到标准数据结构,如DWork结构。

访问静态数据,您可以配置生成的代码以包含一个接口,例如a2l(ASAP2)文件。有关更多信息,请参见导出ASAP2文件用于数据测量和校准.要通过在生成的代码中包含语法或其他修饰来将数据放在特定的内存位置,请创建自己的内存部分和存储类。看到通过插入语法在内存中放置控制数据和函数

参数对象存储位置对代码生成的影响

您可以创建一个参数对象(例如金宝app仿真软件。参数)在基础工作区、模型工作区或数据字典中。但是,当您将存储类应用于对象时,对象的位置可能会影响生成代码中相应数据定义的文件位置。看到参数对象存储位置对代码生成的影响

指定默认# include数据头文件的语法

要在生成的代码中控制数据项(如信号线或块状态)的文件位置,可以对数据项应用存储类(参见向数据元素应用内置和自定义存储类).然后使用头文件自定义属性以指定生成的或包含数据声明的外部头文件。

要减少维护工作和数据输入,请指定头文件,可以省略分隔符(<>),只使用文件名。然后,您可以控制生成的代码用于对应的默认分隔符# include指令。要默认使用尖括号,请设置配置参数>代码生成>代码的位置>#include文件分隔符# include < header.h >

相关的话题