主要内容

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

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

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

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

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

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

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

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

  • 要显式指定单个数据项的位置,请直接应用存储类,例如ExportToFile并使用头文件财产。

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

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

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

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

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

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

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

根据设置配置参数>文件的包装格式,生成的文件,例如模型.c模型_data.c可以包含许多全局变量的定义。相应的头文件可以包含许多声明。

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

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

  • 为了精确地控制数据的文件位置,可以应用存储类,例如ExportToFile到各个数据项。使用存储类的属性,例如定义文件头文件,以指定每个数据项的文件位置。例如,请参见信号数据的定义和声明

将多个文件合并成一个文件

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

  • 当您应用存储类时,例如ExportToFile对于数据元素,请保留属性定义文件头文件空,默认值。另外,设置模型配置参数数据定义源文件中定义的数据.然后,数据定义出现在模型.c与其他全局数据的定义。

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

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

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

  • 应用存储类,例如ExportToFile通过使用代码映射编辑器来修改数据元素。使用存储类的属性,例如定义文件头文件,以指定文件的位置。有关更多信息,请参见配置数据的默认代码生成通过使用结构存储类将参数数据组织成结构

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

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

可变控制参数的综合定义(#定义宏)进入单个头文件

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

  • 用于使用存储类的每个变量控制参数定义,设置头文件属性设置为相同的值。要在可进行搜索、排序和筛选的列表中配置这些对象,可以使用模型数据编辑器参数选项卡。例如,请参见在同一个头文件中生成变量控制宏

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

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

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

目标 技术

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

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

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

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

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

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

  • 在原子子系统中,使用诸如ExportToFile,并使用定义文件财产。但是,您不能将定义文件与属于子系统的源文件放在一起。相反,您指定的定义文件将出现在为模型生成的文件夹中。

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

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

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

指定默认位置

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

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

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

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

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

      • ExportedGlobal

      • ImportedExtern

      • ImportedExternPointer

      • 设置

      • FileScope

      • 可以定位的

      • 结构体

      • CompilerFlag

      在嵌入式编码器中®字典,头文件不支持的存储类的值为空。金宝app不能为不支持的存储类指定默认文件位置。金宝app

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

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

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

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

对于单个数据项,要覆盖默认的文件位置,请使用Code Mappins编辑器直接应用存储类。例如,要使数据项作为全局变量出现在生成的代码中,请应用存储类ExportToFile.然后,使用定义文件头文件属性来控制文件放置。要直接应用存储类,请参见通过使用结构存储类将参数数据组织成结构

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

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

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

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

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

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

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

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

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

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

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

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

要在生成的代码中控制数据项(如信号线或块状态)的文件位置,可以对数据项应用存储类(参见通过使用结构存储类将参数数据组织成结构).然后使用头文件属性指定包含数据声明的生成的头文件或外部头文件。

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

相关的话题