文档

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

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

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

存储类名称 描述
汽车

汽车是模型中每个数据元素的默认存储类设置。数据元素受制于代码生成优化,这可以从代码中消除元素或更改元素的表示。有关这些优化的信息,例如配置参数>代码生成>优化窗格中,看到生成的代码如何存储内部信号、状态和参数数据(万博1manbetx仿真软件编码器)。

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

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

使用此存储类可以启用对数据元素进行操作的优化,从而可能生成更高效的代码。

模型的默认

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

使用此存储类可防止优化消除数据元素的存储(请参阅生成的代码如何存储内部信号、状态和参数数据(万博1manbetx仿真软件编码器))。

ExportedGlobal

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

ImportedExtern

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

使用此存储类可以使模型中的数据元素表示外部代码定义的全局变量。生成的算法代码使用变量而不定义它。

ImportedExternPointer

生成读取和写入由外部代码定义的全局指针变量的代码。生成的代码在生成的文件中声明变量模型_private.h并通过对指针解引用来读写数据。

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

如果您有嵌入式编码器,则可以选择其他内置存储类,如下表所示。

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

设置

生成一个结构,将布尔数据存储在命名位字段中。使用示例请参见

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

是的

是的

CompilerFlag

万博1manbetx支持通过编译器标志或选项定义的预处理器条件。看到为不同的系统生成预处理器条件

如果您使用嵌入式编码器(嵌入式编码器)构建生成的代码,则清除配置参数>只生成代码),要指定编译器选项,您可以使用模型配置参数配置参数>代码生成>自定义代码>其他构建信息>定义了。看到代码生成窗格:自定义代码:附加构建信息:定义(万博1manbetx仿真软件编码器)。

没有

是的

常量

方法生成全局变量定义和声明常量类型限定符。

没有

是的

ConstVolatile

方法生成全局变量定义和声明常量挥发性类型限定符。使用示例请参见类型限定符

没有

是的

定义

生成宏(#定义指令),例如#定义myParam。使用示例请参见宏定义(#define)

没有

是的

ExportToFile

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

是的

是的

FileScope

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

在模型引用层次结构中,如果被引用的模型使用参数对象(例如万博1manbetx仿真软件。参数)在基本工作区或数据字典中创建的,则无法应用FileScope到对象。作为一种变通方法,将参数对象移动到引用模型的模型工作区中。然后,你可以使用FileScope

是的

是的

GetSet 通过调用自定义访问器函数生成与数据交互的代码。外部代码定义数据并提供函数定义。例如,请参见使用自定义存储类GetSet通过函数访问数据

是的

是的

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

没有

是的

ImportFromFile

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

是的

是的

可重用的

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

只能将此存储类应用于万博1manbetx仿真软件。信号对象,表示模型中的多条信号线。

是的

没有

结构体

生成一个可以指定其名称的全局结构。例如,请参见使用结构自定义存储类将参数数据组织到结构中信号的结构

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

是的

是的

挥发性

方法生成全局变量定义和声明挥发性类型限定符。

是的

是的

ParamStruct

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

没有 是的
SignalStruct

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

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

在生成可重入的多实例代码时,如果希望使用存储类,则会应用一些限制和限制。看到在可重入、多实例模型和组件中使用存储类(万博1manbetx仿真软件编码器)。

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

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

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

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

    • ExportedGlobal

    • ImportedExtern

    • ImportedExternPointer

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

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

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

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

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

存储类限制

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

  • 数据对象不能使用嵌入式编码器存储类和多字数据类型。

  • Fcn块不支持在代码生成中使用嵌入式万博1manbetx编码器存储类的参数。

  • 对于使用引用模型的模型中的嵌入式编码器存储类:

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

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

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

相关的话题

这个话题有帮助吗?