主要内容

选择存储类以控制生成代码中的数据表示

一个存储类是应用于数据(如参数、信号和状态)的代码生成设置。在代码配置期间,使用存储类来控制生成代码中数据元素的外观和位置,并防止优化消除该数据元素的存储。

对于模型数据,可以使用代码映射编辑器或代码映射API将存储类直接应用于模型数据元素。使用编辑器或API,为数据类别应用默认存储类,然后根据需要为单个数据元素重写该设置。

对于外部数据,可以通过使用Model Explorer或通过编程方式使用以下函数将存储类应用到数据对象get_paramset_param

一旦为元素或元素类别指定了存储类,就可以为该存储类设置属性,例如头文件、定义文件和内存段。

存储类属性

存储类的属性设置定义了代码生成器如何以及在何处表示生成代码中的数据。存储类的用户可以配置的属性取决于存储类。对于大多数单个元素,用户可以配置一个标识符来在代码中命名数据元素。要确定用户可以为预定义存储类配置的属性,请参阅以下有关特定存储类的信息。

当您使用自定义存储类设计器创建存储类时,您可以选择存储类的用户是否可以指定其他设置。看到允许存储类用户指定属性值

默认的存储类

默认情况下,单个数据元素的存储类为汽车.通过使用这个默认值,您可以选择让代码生成器处理存储类选择和应用程序。在这种情况下,数据元素服从于代码生成优化,这可以从代码中删除元素或更改元素的表示。如果优化没有消除数据元素,则该元素将作为生成代码中的标准数据结构的字段出现。

当使用代码映射编辑器或代码映射API时,使用存储类配置的数据元素汽车优化获取相应数据类别的默认代码生成设置并没有消除这一点。如果您没有为数据元素类别指定代码配置,则存储类为默认的.当数据元素类别使用此存储类时,该类别中的数据元素在生成的代码中显示为标准数据结构的字段。

内置和预定义的存储类

为了防止优化消除数据元素的存储,可以根据代码生成需求为元素选择存储类。的可用存储类包括内置存储类、预定义存储类金宝app包,还可能包括在Embedded Coder Dictionary中定义的其他特定于项目的存储类。如果您有列出的存储类无法满足的特殊需求,并且您正在为基于ert的目标生成代码,那么您可以定义并使用一个新的存储类。看到为软件架构定义存储类、内存段和函数模板使用自定义存储类设计器创建存储类

金宝app®编码器™,您可以从这些内置和预定义的存储类中进行选择。

需求 存储类
启用优化,可能生成更有效的代码。 汽车(单个数据元素)
对于无法优化的数据元素,将数据表示为标准数据结构的字段。 默认的(默认映射)
防止优化消除数据元素的存储。 模型的默认(个人映射)
从一个独立的全局变量访问数据。生成的代码包含变量声明和定义。 ExportedGlobal
从一个独立的全局变量访问数据。生成的代码包含变量声明。您的外部代码提供了定义。 ImportedExtern, ImportedExternPointer

如果你有嵌入式编码器®,您可以从这些附加的预定义存储类中进行选择金宝app包中。

需求 存储类
防止优化消除数据元素的存储。 词典默认(默认映射)
生成独立的变量。
生成变量作为结构的字段。
生成具有在代码编译期间固定值的变量。
生成通过函数调用访问的变量。 GetSet
为单实例数据生成变量,为多实例数据生成结构。 MultiInstance

这些存储类是可以添加到嵌入式编码器字典的存储类的示例。当您使用Quick Start工具准备用于代码生成的模型时,可以定义并使用这些示例。

需求 存储类

生成包含参数数据和信号或状态数据的全局结构。

ParamStruct, SignalStruct

汽车

当您选择这个存储类时,代码生成器将处理如何在生成的代码中表示数据,并支持对数据元素进行操作的优化,从而可能生成更有效的代码。

汽车是模型中每个数据元素的默认存储类设置。数据元素受代码生成优化的影响,可以从代码中删除元素或更改元素的表示。有关这些优化的信息,例如配置参数>代码生成>优化窗格中,看到生成代码如何存储内部信号、状态和参数数据

优化不能从代码中消除某些数据,比如大多数块状态。控件上指定的其余数据获取默认存储类数据默认值选项卡的代码映射编辑器(请参阅配置数据的默认代码生成).如果不能消除数据元素,则代码中元素的名称将基于您通过使用模型配置参数指定的命名规则。看到标识符的格式控制需要嵌入式编码器。

默认的

数据默认值选项卡的代码映射编辑器,默认的是每个数据元素类别的默认存储类设置。如果将类别的存储类设置保持在此值,则不受代码生成优化约束的数据元素将显示为标准数据结构的字段。看到生成代码如何存储内部信号、状态和参数数据

模型的默认

在为代码生成配置单个数据元素时,请使用模型的默认存储类,以防止优化消除对数据元素的存储。看到生成代码如何存储内部信号、状态和参数数据.使用此存储类设置,数据元素将获得为对应数据类别指定的默认存储类数据默认值选项卡的代码映射编辑器。代码中数据元素的名称与模型中的名称相同。

词典默认

在Embedded Coder中,如果将模型链接到数据字典(其中包括为数据类别配置默认代码定义的编码器字典),则可以使用code Mappings编辑器应用字典默认值。在数据默认值选项卡,选择一个类别,然后将存储类设置为词典默认.有关在编码器字典中配置默认代码映射的更多信息,请参见在共享字典中配置默认代码映射

ExportedGlobal

使用这个内置存储类来生成全局变量定义和声明。默认情况下,变量的名称是数据元素的名称。代码在生成的文件中声明变量模型.h,你可以包括(# include)。代码生成器不会从生成的代码中优化这个全局变量。

在使用此存储类时,还可以配置此属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

有关使用此存储类的示例,请参见模型接口元素的C代码生成配置

ImportedExtern, ImportedExternPointer

使用内置存储类ImportedExtern要使模型中的数据元素表示外部代码定义的全局变量。生成的算法代码使用了这个变量,但没有定义它。

生成从外部代码定义的全局变量读取和写入的代码。生成的代码在生成的文件中声明变量模型_private.h使模型入口点函数可以对变量进行读写操作。

例如,您可以应用存储类ImportedExtern到信号线、块状态或参数对象。对进口数据:

  • 生成的代码不会初始化参数数据。您的代码必须初始化导入的参数数据。

  • 生成的初始化函数动态地初始化一些信号和状态数据。与生成的代码分配的数据不同,代码不会将导入的信号或状态数据初始化为存储值为零。相反,代码会立即将数据初始化为您在Simulink中指定的真实值。金宝app

使用ImportedExternPointer当外部代码定义数据元素并提供用于访问该数据的指针时。生成的代码对该指针进行读写操作。生成的代码在生成的文件中声明变量模型_private.h并通过解引用指针对数据进行读写操作。

当您使用这些存储类时,您还可以配置此属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

设置

使用此存储类生成一个结构,该结构将布尔数据存储在指定的位字段中。

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

StructName 生成代码中数据元素的结构的名称。

有关使用此存储类的示例,请参见

CompilerFlag

使用此存储类支持使用编译器标志或选项定义的预处理器条金宝app件。

如果您使用Embedded Coder来构建生成的代码,那么要指定编译器选项,您可以使用模型配置参数配置参数>代码生成>自定义代码>额外的构建信息>定义了.看到代码生成窗格:自定义代码:附加生成信息:定义

在使用此存储类时,还可以配置此属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

有关使用此存储类的示例,请参见为变量系统生成预处理条件

Const, Volatile和ConstVolatile

使用这些存储类生成全局变量定义和声明常量挥发性,或常量挥发性类型限定符。

在使用这些存储类时,还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

HeaderFile

源头文件,包含由数据元素和外部代码读取的全局数据的声明。

DefinitionFile

源定义文件,其中包含由数据元素和外部代码读取的全局数据的定义。

老板

全局数据的所有者,该全局数据是用为使用该数据的多个组件之一生成的代码定义的。

PreserveDimensions

当模型配置参数阵列布局被设置为,该标志指示是否保留在生成的代码中表示为多维数组的数据元素的维度。

有关使用此存储类的示例,请参见类型限定符

定义、ImportedDefine

使用定义存储类以生成宏(#定义指令),如#定义myParam 5

使用ImportedDefine要生成使用宏的代码(#定义指令)在外部代码的头文件中定义。例如,请参见宏定义(#定义)

在使用这些存储类时,还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

HeaderFile

源头文件,包含由数据元素和外部代码读取的全局数据的声明。

有关使用此存储类的示例,请参见宏定义(#定义)

ExportToFile

生成外部文件的全局变量定义和声明。您可以指定定义和声明变量的文件的名称和位置。看到控制全局数据定义和声明在生成文件中的位置

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

HeaderFile

源头文件,代码生成器在其中放置数据元素和外部代码读取的全局数据的声明。

DefinitionFile

源定义文件,代码生成器在其中放置数据元素和外部代码读取的全局数据的定义。

代码生成器只对单实例模型执行此设置。对于可重用的多实例模型,该设置将被忽略,因为数据定义是在父级处理的。

老板

模型层次结构中的组件,代码生成器在其中放置全局数据定义,而不是将其放置在层次结构的顶层组件中。要求您设置模型配置参数使用数据对象中的所有者来放置数据定义

PreserveDimensions

当模型配置参数阵列布局被设置为,该标志指示是否保留在生成的代码中表示为多维数组的数据元素的维度。

有关使用此存储类的示例,请参见参数数据的定义、初始化和声明

FileScope

使用此存储类生成全局变量定义和声明,该定义和声明具有静态类型限定符。在生成的代码中,变量的作用域被限制在当前文件中,这通常是模型.c

在模型引用层次结构中,如果被引用的模型使用参数对象(例如金宝app仿真软件。参数),则无法应用FileScope的对象。作为一个变通方法,将参数对象移动到引用模型的模型工作区中。然后,你可以使用FileScope

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

PreserveDimensions

当模型配置参数阵列布局被设置为,该标志指示是否保留在生成的代码中表示为多维数组的数据元素的维度。

GetSet

使用此存储类生成通过调用自定义访问器函数与数据交互的代码。外部代码定义数据并提供函数定义。

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

HeaderFile

源头文件,包含由数据元素和外部代码读取的全局数据的声明。

GetFunction 数据元素,它作为对指定的调用出现在生成的代码中得到函数
SetFunction 数据元素,它作为对指定的调用出现在生成的代码中函数

有关使用此存储类的示例,请参见通过使用存储类GetSet的函数访问数据

ImportFromFile

使用此存储类生成从外部代码定义的全局变量读取和写入的代码。ImportFromFile类似于ExportToFile,但生成的代码不定义该变量。

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

HeaderFile

源头文件,包含由数据元素和外部代码读取的全局数据的声明。

PreserveDimensions

当模型配置参数阵列布局被设置为,该标志指示是否保留在生成的代码中表示为多维数组的数据元素的维度。

有关使用此存储类的示例,请参见集成外部应用程序代码与PID控制器生成的代码

可以定位的

对于信号,如果可能的话,通过使用局部变量来最小化全局存储的使用。

  • 如果该变量在单个函数中使用,则该变量是该函数的局部变量。

  • 如果该变量在单个文件中使用,则该变量是该文件的局部变量。

  • 如果该变量在多个函数或文件中使用,则该变量为全局变量。

生成局部变量可以防止代码生成器从生成的代码中删除变量。

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

PreserveDimensions

当模型配置参数阵列布局被设置为,该标志指示是否保留在生成的代码中表示为多维数组的数据元素的维度。

有关使用此存储类的示例,请参见使用可本地化存储类生成局部变量

可重用的

使用这个存储类可以为模型中的多个独立信号重用相同的变量。代码生成器将数据路径(一系列连接的块)的中间计算存储在一个单独的、重用的全局变量中。

在使用此存储类时,还可以配置此属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

有关使用此存储类的示例,请参见为路径中的信号指定缓冲区重用

结构体

使用此存储类生成具有可指定名称的全局结构。

当您使用这个存储类时,您还可以配置这些属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

StructName 生成代码中数据元素的结构的名称。

有关使用此存储类的示例,请参见通过使用结构存储类将参数数据组织成结构结构的信号

MultiInstance

要为单实例数据生成非结构化变量,为多实例数据生成结构,请使用此存储类。当您将此存储类应用于数据项时,Embedded Coder Dictionary将确定它是单实例存储类还是多实例存储类。字典通过数据类型和模型引用层次结构中的模型上下文来确定类的类型。可以复制此存储类,以创建可编辑的副本。

将此存储类应用于单个数据元素时,还可以配置标识符财产。的标识符属性是代码生成器用于命名生成代码中的数据元素的标识符字符串。

有关使用此存储类的示例,请参见用于不同模型层次结构上下文的灵活存储类

ParamStruct, SignalStruct

使用这些存储类分别生成包含参数和信号或状态数据的全局结构。在组件层次结构(引用模型或原子子系统)中,可以使用这些存储类创建相应的结构层次结构。只有在使用Quick Start工具为代码生成准备了模型之后,这些存储类才会出现在代码映射编辑器中。

这些存储类仅对模型拥有的数据可用。

当您使用这些存储类时,您还可以配置此属性。

财产 描述
标识符

代码生成器用于命名生成代码中的数据元素的标识符字符串。

存储类的限制

  • 当您在代码映射编辑器(Embedded Coder)或代码映射API中使用存储类时,会遇到一些限制。看到限制

  • 数据对象不能使用Embedded Coder存储类和多字数据类型。

  • 对于使用引用模型的模型中的Embedded Coder存储类:

    • 如果应用分组存储类,例如结构体设置,则必须设置存储类数据范围财产进口并且必须在外部头文件中提供数据声明。分组存储类在生成的代码中使用一个变量来表示多个数据对象。

    • 如果参数对象存在于基本工作空间或数据字典中,并且被引用的模型使用了该对象,则不能应用存储类FileScope.要将此存储类应用于参数对象,请将对象移动到所引用模型的模型工作空间中。

  • 您不能应用存储类FileScope到数据交换接口(C API、外部模式或ASAP2)或mat文件日志所使用的数据项。文件作用域的数据不能从外部访问。

  • 您不能应用存储类FileScope转换为多个文件中使用的数据。

相关的话题