文档

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

一个存储类是您应用于模型数据的代码生成设置,例如信号,块参数和状态。使用存储类来控制生成的代码中的数据元素的外观。

该表显示了您可以选择的内置存储类。这些存储类是随附的万博1manbetx®编码器™

存储类名称 描述
汽车

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

优化不能从代码中消除某些数据,比如大多数块状态。剩余的数据获取您用代码映射编辑器指定的适当的默认存储类(参见配置数据的默认代码生成(嵌入式编码器) - 挤压嵌入式编码器®).如果您将代码映射编辑器中的存储类设置保持默认值,默认的,数据元素显示为适当的标准数据结构的字段(参见生成的代码如何存储内部信号,状态和参数数据).

如果优化不能消除数据元素,则代码中元素的名称将基于您用模型配置参数指定的命名规则(参见标识符的格式控制(嵌入式编码器)-需要嵌入式编码器)。

使用这个存储类来支持对数据元素进行操作的优化,从而可能生成更有效的代码。

模型的默认

该数据元素获取您使用代码映射编辑器指定的相应默认存储类。代码中数据元素的名称与模型中的名称相同。

使用这个存储类可以防止优化消除数据元素的存储(参见生成的代码如何存储内部信号,状态和参数数据).

ExportedGlobal

生成全局变量定义和声明。变量的名称就是数据元素的名称。代码在生成的文件中声明变量模型.h,你可以包括(# include)在您的外部代码中。

ImportedExtern

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

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

ImportedExternPointer

生成从外部代码定义的全局指针变量的读取和写入的代码。生成的代码声明生成的文件中的变量模型_private.h.通过解除指针,读取和写入数据。

当外部代码定义数据元素并提供用于访问该数据的指针时,请使用此存储类。

如果您有Embedded Coder,您可以选择额外的内置存储类,如下表所示。

存储类名称 描述 用于信号或状态数据 参数数据的使用

设置

生成一个结构,将布尔数据存储在指定的位字段中。例如,请参见(嵌入式编码)。

不能在“代码映射编辑器”中使用此存储类。

是的

是的

Compilerflag.

万博1manbetx支持通过编译器标志或选项定义的预处理条件。看到为变量系统生成预处理条件(嵌入式编码)。

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

是的

常量

使用包含全局变量定义和声明常量类型限定符。

是的

ConstVolatile

使用包含全局变量定义和声明常量挥发性类型限定符。例如,请参见类型限定符(嵌入式编码)。

是的

定义

生成一个宏(#定义指令),如#定义myParam 5.例如,请参见宏定义(#定义)(嵌入式编码)。

是的

exportTofile.

生成全局变量定义和声明。您可以指定定义和声明变量的文件的名称。

是的

是的

FileScope

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

在模型引用层次结构中,如果被引用的模型使用参数对象(例如万博1manbetx仿真软件。参数),则无法应用FileScope对象。作为解决方法,将参数对象移动到引用模型的模型工作空间中。然后,你可以使用FileScope

是的

是的

拍打 通过调用您的自定义访问器功能生成与数据交互的代码。您的外部代码定义了数据并提供函数定义。有关示例,请参见通过自定义存储类GetSet函数访问数据(嵌入式编码)。

是的

是的

Importededefine. 生成使用宏的代码(#定义指令)在外部代码的头文件中定义。例如,请参见宏定义(#定义)(嵌入式编码)。

是的

ImportFromFile

生成从外部代码定义的全局变量读取和写入的代码。类似于exportTofile.,但生成的代码不定义该变量。

是的

是的

可重用的

生成更有效的代码,将数据路径(一系列连接的块)的中间计算存储在单个重用的全局变量中。例如,请参见使用Simulink指定缓冲区重用。万博1manbetx信号对象(嵌入式编码)。

您可以仅将此存储类应用于a万博1manbetxsimulink.signal.对象,该对象表示模型中的多个信号线。

是的

塑造

生成一个可以指定其名称的全局结构。有关示例,请参见通过使用结构自定义存储类将参数数据组织到结构中(嵌入式编码)结构的信号(嵌入式编码)。

不能在“代码映射编辑器”中使用此存储类。

是的

是的

挥发性

使用包含全局变量定义和声明挥发性类型限定符。

是的

是的

ParamStruct

生成包含参数数据的全局结构。在组件层次结构(引用模型或原子子系统)中,您可以使用这个存储类创建相应的参数结构层次结构。此存储类仅出现在名为的数据类别的代码映射编辑器中本地参数

是的
信号标记

生成包含信号或状态数据的全局结构。在组件层次结构(引用模型或原子子系统)中,可以使用这个存储类创建相应的信号和状态结构层次结构。这个存储类只出现在代码映射编辑器中。

是的
可以定位的 对于信号,如果可能,生成函数的局部变量,而不是全局存储。生成局部变量会阻止代码生成器实现从生成的代码中删除变量的优化。例如,请参见使用本地化自定义存储类生成本地变量(嵌入式编码)。 是(信号而不是状态)

当您生成可重入的多实例代码时,如果您想使用存储类,就会受到限制和限制。看到在可重入、多实例模型和组件中使用存储类

使用存储类指定文件名和其他数据属性(嵌入式编码器

应用一些存储类后,如exportTofile.,您可以指定其他设置,例如声明(标题)和定义文件名。在代码映射编辑器中,要访问这些其他设置,请使用属性检查器。

对于其他存储类,您不能指定其他设置。

  • 这些内置的万博1manbetx仿真软件编码器存储类不允许指定其他设置:

    • ExportedGlobal

    • ImportedExtern

    • ImportedExternPointer

  • 内置嵌入式编码器存储类通常允许您指定声明和定义文件名。

  • 使用自定义存储类设计器创建存储类时,可以选择存储类的用户是否可以指定其他设置。看到允许自定义存储类的用户指定属性值(嵌入式编码)。

指定默认# include声明数据的头文件语法(嵌入式编码器

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

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

存储类的限制

  • 在代码映射编辑器(嵌入式编码器)中使用存储类时,会应用一些限制。看到限制(嵌入式编码)。

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

  • Fcn块在代码生成中不支持带有Emb万博1manbetxedded Coder存储类的参数。

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

    • 如果将分组存储类应用于多个数据项,则存储类数据范围属性必须设置为进口并且您必须在外部标题文件中提供数据声明。分组存储类在生成的代码中使用单个变量来表示多个数据对象。例如,存储类设置塑造是分组存储类。

    • 如果参数对象存在于基本工作空间或数据字典中,并且被引用的模型使用了该对象,则不能应用存储类FileScope.作为一个变通方法,将对象移动到引用模型的模型工作区中。然后,你可以使用FileScope

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

相关话题

这个话题有用吗?