帮助中心帮助中心
枚举数据是受限于有限组值的数据。一个枚举数据类型是一个MATLAB®类的集合枚举值.每个枚举值由枚举的名字和一个潜在的整数软件在内部和生成的代码中使用。以下是枚举数据类型的MATLAB类定义BasicColors,在本节的示例中使用。
BasicColors
classdef BasicColors < 金宝appSimulink. classIntEnumType枚举Red(0) Yellow(1) Blue(2) end end
了解有关枚举数据类型及其在Simulink中的使用的基本信息金宝app®模型,看到在Simulink模型中使用枚举数据金宝app.有关Stateflow中的枚举数据类型的信息®图表,看定义枚举数据类型(Stateflow).
当您为枚举指定数据类型时,您可以:
通过指定超类来控制生成代码中枚举数据类型的大小。
减少RAM/ROM的使用。
提高代码可移植性。
改进与遗留代码的集成。
你可以指定这些整数数据类型:
int8
uint8
int16
uint16
int32
金宝app仿真软件。IntEnumType.为您的硬件平台指定带符号整数范围内的值。
金宝app仿真软件。IntEnumType
若要指定整数数据类型大小,请从整数数据类型派生枚举类。
classdef颜色< int8枚举红(0)绿(1)蓝(2)结束结束
代码生成器生成以下代码:
typedef int8_T Colors;#define Red ((Colors)0) #define Green ((Colors)1) #define Blue ((Colors)2)
金宝appSimulink.defineIntEnumType
若要指定整数数据类型大小,请指定名称-值对StorageType作为整数数据类型。
StorageType
金宝appSimulink.defineIntEnumType (“颜色”, {“红色”,“绿色”,“蓝”},...(0, 1, 2),“StorageType”,“int8”)
当你从使用枚举数据的模型生成代码时,你可以实现这些静态方法来自定义在模拟和生成代码期间的类型行为:
getDefaultValue—枚举数据类型的默认值。
getDefaultValue
getDescription—指定枚举数据类型的描述。
getDescription
getHeaderFile-为生成的代码指定定义类型的头文件。
getHeaderFile
getDataScope-指定生成的代码是否将枚举数据类型定义导出到或从单独的头文件导入。
getDataScope
addClassNameToEnumNames—指定类名是否在生成的代码中成为前缀。
addClassNameToEnumNames
第一种方法,getDefaultValue,与模拟和代码生成相关,并在指定一个默认枚举值.其他方法只与代码生成相关。方法中包含该方法的一个版本,以自定义枚举类型的行为方法(静态)部分的枚举类定义。如果不想自定义该类型,请省略方法(静态)部分。下表总结了为每种方法提供的方法和数据。
方法(静态)
”
一个字符向量,包含定义枚举类型的头文件的名称。
默认情况下,生成的# include指令使用预处理器分隔符"而不是<而且>.要生成该指令# include < myTypes.h >,指定自定义返回值为' < myTypes.h >”.
# include
"
<
>
# include < myTypes.h >
' < myTypes.h >”
“汽车”
“出口”
“进口”
假
真正的
为枚举数据类型指定描述,请将此方法包含在方法(静态)枚举类的部分:
function retVal = getDescription() % getDescription可选数据类型描述。retVal =“描述”;结束
代入MATLAB字符向量描述.生成的定义枚举类型的代码包含指定的描述。
描述
为防止生成的代码定义枚举数据类型,从而允许在外部文件中提供定义,请将这些方法包含在方法(静态)枚举类的部分:
函数retVal = getHeaderFile()% GETHEADERFILE在生成的代码中定义此类型的文件。getDataScope方法确定指定文件的重要性。retVal =“imported_enum_type.h”;结束函数retVal = getDataScope()指定生成的代码是否导入或导出此类型。返回其中之一:% '自动':在model_types.h中定义类型,如果指定头文件则导入% '导出':在生成的头文件中定义类型% '导入':从指定头文件导入类型定义如果您没有定义此方法,DataScope默认为'Auto'。retVal =“进口”;结束
而不是定义类型模型_types.h方法从指定的头文件导入定义,这是默认行为# include声明:
模型_types.h
模型
# include“imported_enum_type.h”
生成代码不会创建导入的头文件。必须使用该方法指定的文件名提供头文件getHeaderFile,它定义了枚举数据类型。
要创建与现有c代码枚举对金宝app应的Simulink枚举,请使用金宝appSimulink.importExternalCTypes函数。
金宝appSimulink.importExternalCTypes
要生成定义枚举数据类型的单独头文件,请将这些方法包含在方法(静态)枚举类的部分:
函数retVal = getDataScope()指定生成的代码是否导入或导出此类型。返回其中之一:% '自动':在model_types.h中定义类型,如果指定头文件则导入% '导出':在生成的头文件中定义类型% '导入':从指定头文件导入类型定义如果您没有定义此方法,DataScope默认为'Auto'。retVal =“出口”;结束函数retVal = getHeaderFile()% GETHEADERFILE在生成的代码中定义此类型的文件。getDataScope方法确定指定文件的重要性。retVal =“exported_enum_type.h”;结束
生成的代码将枚举类型定义导出到生成的头文件exported_enum_type.h.
exported_enum_type.h
默认情况下,生成代码中的枚举值具有与枚举类定义中相同的名称。或者,您的代码可以用枚举类的名称为枚举类中的每个枚举值加上前缀。您可以使用此技术来防止标识符冲突或提高代码的可读性。方法中包含此方法可指定类名前缀方法(静态)枚举类的部分:
函数retVal = addClassNameToEnumNames()% ADDCLASSNAMETOENUMNAMES是否添加类名%作为生成代码中枚举成员名的前缀。返回true或false。如果不定义此方法,则不添加前缀。retVal = true;结束
指定返回值为真正的启用类名前缀或as假抑制前缀。如果你指定真正的,类中的每个枚举值在生成的代码中显示为EnumTypeName_EnumName.用于示例枚举类BasicColors在枚举数据类型,生成代码中的数据类型定义可能如下所示:
EnumTypeName_EnumName
# defined_typedef_for_basiccolors_ #define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef enum {BasicColors_Red = 0, /*默认值*/ BasicColors_Yellow = 1, BasicColors_Blue = 2,}# endif
枚举类名BasicColors作为每个枚举名称的前缀出现。
从头文件导入枚举数据时,可以在代码生成期间控制重复枚举成员名的使用。重复的枚举成员名提高了代码的可读性。使用模型配置参数重复枚举成员名在代码生成期间允许不同枚举类型中的重复枚举成员名,或生成错误或警告消息。只有在两个枚举成员名相同的情况下,才可以使用重复的枚举成员名StorageType并有这些规格:
DataScope设置为“进口”
DataScope
StorageType设置为“int8”,“int16”,“int32”,“uint8”,或“uint16”
“int8”
“int16”
“int32”
“uint8”
“uint16”
价值是一样的
价值
例如:
typedef int32_T enum{红= 0,黄= 1,蓝= 2,}A;typedef int32_T enum{黑= 0,黄= 1,白= 2,}B;
黄色的
一个
B
假设您定义了一个枚举类型BasicColors.你可以通过以下命令指定生成的代码实现类型定义:
一个枚举块。硬件的本机整数类型是枚举成员的基础整数类型。
枚举
一个类型定义声明和一系列的#定义宏。的类型定义语句将枚举类型名称基于特定的整数数据类型,例如int8.宏将枚举成员与基础整数值关联起来。
类型定义
#定义
类来实现类型定义枚举布洛克:
在Si金宝appmulink中,使用类定义枚举类型classdef块在脚本文件中。从类型派生枚举金宝app仿真软件。IntEnumType.
classdef
或者,也可以使用函数金宝appSimulink.defineIntEnumType.不指定属性StorageType.
生成代码时,类型定义出现在枚举块。
#ifndef _DEFINED_TYPEDEF_FOR_BasicColors_ #define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef enum {Red = 0, /*默认值*/ Yellow, Blue,} BasicColors;# endif
类来实现类型定义类型定义语句和#定义宏:
在Si金宝appmulink中,使用类定义枚举类型classdef块在脚本文件中。从特定的整数类型派生枚举,例如int8.
或者,也可以使用函数金宝appSimulink.defineIntEnumType.指定属性StorageType使用特定的整数类型,例如int8.
生成代码时,类型定义显示为类型定义声明和一系列的#定义宏。
#define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef int8_T BasicColors;#define Red ((BasicColors)0) /*默认值*/ #define Yellow ((BasicColors)1) #define Blue ((BasicColors)2) #endif . #
默认情况下,生成的文件模型_types.h包含枚举类型定义。
Si金宝appmulink数据类型转换块接受整数类型的信号。该块将输入转换为枚举类型的基础值之一。
如果输入值与枚举类型值的基础值不匹配,则Simulink插入一个安全强制转换以用枚举类型默认值替换输入值。金宝app
您可以在Simulink数据类型转换块或状态流块的代码生成期间启用或禁用枚举的安全强制转换。金宝app
若要控制安全铸造,请启用或禁用整数溢出时饱和块参数。参数的作用如下:
启用:金宝app在模拟过程中,Simulink用枚举值的默认值替换不匹配的输入值。软件在代码生成过程中生成安全强制转换函数。
禁用:对于不匹配的输入值,Simulink在模拟过程中产生一个错误。金宝app该软件在代码生成过程中省略了安全强制转换功能。在这种情况下,代码更加高效。然而,代码可能更容易出现运行时错误。
这个例子展示了安全强制转换是如何执行的int32_T ET08_safe_cast_to_BasicColors对于枚举BasicColors为32位硬件生成时出现在生成的代码中。
int32_T ET08_safe_cast_to_BasicColors
静态int32_T ET08_safe_cast_to_BasicColors(int32_T输入){int32_T输出;/*初始化输出值为BasicColors (Red)的默认值*/ output = 0;if ((input >= 0) && (input <= 2)){/*如果输出值是BasicColors的成员则将输出值设置为输入值*/ output = input;}返回输出;}
如果方块整数溢出时饱和参数禁用时,此函数不会出现在生成的代码中。
生成的代码不支持记录枚举数据。金宝app
枚举|金宝appSimulink.defineIntEnumType|金宝appSimulink.data.getEnumTypeInfo
金宝appSimulink.data.getEnumTypeInfo
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在可用的地方获得翻译的内容,并查看当地的活动和优惠。根据您的地理位置,我们建议您选择:.
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。
联系当地办事处