文档
枚举数据是限制在一个有限的数据设置的值。一个枚举数据类型MATLAB是一种®类定义了一组枚举值。每一个枚举值包含一个枚举的名字和一个潜在的整数内部软件使用和生成的代码。下面是一个MATLAB类定义为枚举数据类型命名BasicColors,这是在这一节中的示例使用。
BasicColors
classdef BasicColors <仿金宝app真软件。IntEnumType枚举红(0)黄(1)蓝(2)结束
为枚举数据类型的基本信息及其在仿真软件中使用金宝app®模型,看到使用枚举数据在仿真软件模型金宝app(金宝app模型)。在Stateflow枚举数据类型信息®图表,看定义枚举数据类型(Stateflow)。
当你指定一个枚举数据类型,您可以:
枚举数据类型的大小控制生成的代码通过指定一个超类。
减少RAM /罗使用。
提高代码的可移植性。
改善与遗留代码的集成。
您可以指定这些整数数据类型:
int8
uint8
int16
uint16
int32
金宝appSimulink.IntEnumType。指定带符号整数的值的范围为您的硬件平台。
金宝appSimulink.IntEnumType
指定一个整数数据类型大小、枚举类来自整数数据类型。
classdef颜色< int8枚举红(0)绿(1)蓝(2)结束结束
代码生成器生成此代码:
typedef int8_T颜色;#定义红(0)(颜色)#定义绿色((颜色)1)# define蓝色((颜色)2)
金宝appSimulink.defineIntEnumType
指定一个整数数据类型大小、指定名称-值对StorageType整数数据类型。
StorageType
金宝appSimulink.defineIntEnumType (“颜色”,{“红色”,“绿色”,“蓝”},…(0,1,2),“StorageType”,“int8”)
当你从一个模型生成代码,使用枚举数据,您可以实现这些静态方法来定制的行为类型在模拟和生成的代码:
getDefaultValue——指定枚举数据类型的默认值。
getDefaultValue
getDescription——指定枚举数据类型的描述。
getDescription
getHeaderFile——指定头文件类型定义生成的代码。
getHeaderFile
getDataScope——指定生成的代码是否出口或进口枚举数据类型定义或从一个单独的头文件。
getDataScope
addClassNameToEnumNames——指定是否生成的代码的类名变成了一个前缀。
addClassNameToEnumNames
第一种方法,getDefaultValue,相关仿真和代码生成,和描述指定一个默认的枚举值(金宝app模型)。另一种方法是相关代码生成。自定义枚举类型的行为,包括一个版本的方法方法(静态)部分枚举类的定义。如果你不想定制类型,省略了方法(静态)部分。表总结了方法和数据为每一个供应。
方法(静态)
”
一个特征向量包含头文件的名称定义枚举类型。
默认情况下,生成的# include指令使用预处理器的分隔符”而不是<和>。生成的指令# include < myTypes.h >,指定自定义返回值“< myTypes.h >”。
# include
<
>
# include < myTypes.h >
“< myTypes.h >”
“汽车”
“出口”
“进口”
假
真正的
指定一个描述枚举数据类型,包括该方法的方法(静态)枚举类的部分:
retVal = getDescription()函数% getDescription数据类型的描述(可选)。retVal =“描述”;结束
用MATLAB特征向量代替描述。生成的代码定义枚举类型包括指定的描述。
描述
防止生成的代码定义一个枚举数据类型,它允许您提供一个外部文件中的定义,包括这些方法方法(静态)枚举类的部分:
函数retVal = getHeaderFile ()% GETHEADERFILE指定在生成的代码定义这种类型的文件。% getDataScope方法确定指定的文件的重要性。retVal =“imported_enum_type.h”;结束函数retVal = getDataScope ()% GETDATASCOPE指定生成的代码是否进口或出口这种类型。%返回之一:% '汽车':在model_types定义类型。如果头文件指定h,或导入%“出口”:在生成的头文件定义类型%“进口”:从指定头文件导入类型定义%如果您没有定义这个方法,DataScope默认是“汽车”。retVal =“进口”;结束
而不是定义的类型模型_types.h生成的代码,这是默认行为,从指定的进口定义头文件使用# include声明:
模型_types.h
模型
# include“imported_enum_type.h”
生成代码不会创建导入的头文件。你必须提供的头文件,使用指定的文件名的方法getHeaderFile,定义枚举数据类型。
创建一个模型对应于现有的金宝appc代码列出,使用金宝appSimulink.importExternalCTypes函数。
金宝appSimulink.importExternalCTypes
生成一个单独的头文件定义枚举数据类型,包括这些方法方法(静态)枚举类的部分:
函数retVal = getDataScope ()% GETDATASCOPE指定生成的代码是否进口或出口这种类型。%返回之一:% '汽车':在model_types定义类型。如果头文件指定h,或导入%“出口”:在生成的头文件定义类型%“进口”:从指定头文件导入类型定义%如果您没有定义这个方法,DataScope默认是“汽车”。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;结束
指定返回值真正的使加前缀或类名假压制加前缀。如果您指定真正的在课堂上,每一个枚举值出现在生成的代码EnumTypeName_EnumName。枚举类的示例BasicColors在枚举数据类型,数据类型定义中生成的代码可能会看起来像这样:
EnumTypeName_EnumName
的ifndef _DEFINED_TYPEDEF_FOR_BasicColors_ # define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef enum {BasicColors_Red = 0, / *默认值* / BasicColors_Yellow = 1, BasicColors_Blue = 2,} BasicColors;# endif
枚举类名BasicColors似乎每个枚举名称作为前缀。
当你导入枚举数据从一个头文件,您可以控制使用重复的代码生成期间枚举成员名。重复的枚举成员名提高代码的可读性。使用该模型配置参数重复的枚举成员名允许重复的枚举成员的名字在不同的枚举类型代码生成或生成一个错误或警告消息。您可以使用复制枚举成员只有两个枚举有相同的名字StorageType和这些规范:
DataScope设置为“进口”
DataScope
StorageType设置为“int8”,“int16”,“int32”,“uint8”,或“uint16”
“int8”
“int16”
“int32”
“uint8”
“uint16”
价值都是一样的
价值
例如:
typedef int32_T enum{红色= 0,黄色= 1,蓝色= 2,};typedef int32_T enum{黑= 0,黄色= 1,白色= 2,}B;
黄色的
一个
B
假设您定义一个枚举类型BasicColors。您可以指定生成的代码实现通过使用类型定义:
一个枚举块。本机整数类型的硬件底层整数类型的枚举成员。
枚举
一个类型定义声明和一系列的#定义宏。的类型定义声明,基地在特定整数数据类型,枚举类型名称等int8。宏将枚举成员与底层的整数值。
类型定义
#定义
实现通过使用一个类型定义枚举布洛克:
在仿真金宝app软件中,通过使用一个定义枚举类型classdef块在一个脚本文件中。派生的枚举类型金宝appSimulink.IntEnumType。
classdef
另外,使用函数金宝appSimulink.defineIntEnumType。没有指定的财产吗StorageType。
当您生成代码时,出现在一个类型定义枚举块。
的ifndef _DEFINED_TYPEDEF_FOR_BasicColors_ # define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef enum{红= 0,/ *默认值* /黄色、蓝色,}BasicColors;# endif
实现使用一个类型定义类型定义语句和#定义宏:
在仿真金宝app软件中,定义枚举类型使用classdef块在一个脚本文件中。推导出等特定的整数类型的枚举int8。
另外,使用函数金宝appSimulink.defineIntEnumType。指定属性StorageType使用特定的整数类型等int8。
当您生成代码时,类型定义作为一个出现类型定义声明和一系列的#定义宏。
的ifndef _DEFINED_TYPEDEF_FOR_BasicColors_ # define _DEFINED_TYPEDEF_FOR_BasicColors_ typedef int8_T BasicColors;#定义红((BasicColors) 0) / *默认值* / # define黄色((BasicColors) 1) # define蓝色((BasicColors) 2) # endif
默认情况下,生成的文件模型_types.h包含枚举类型定义。
一个金宝app模型数据类型转换块接受一个整数类型的信号。块将输入转换为枚举类型的基本价值观之一。
如果输入值不匹配一个潜在价值的枚举类型的值,仿真软件插入一个安全投来代替输入值的枚举类型默认值。金宝app
期间您可以启用或禁用安全铸造枚举代码生成模型数据类型转换块或Stateflow块。金宝app
控制安全铸造、启用或禁用浸透在整数溢出块参数。参数是这样工作的:
启用:金宝app仿真软件取代了nonmatching输入值和默认值的枚举值模拟。软件生成一个安全的演员在代码生成功能。
禁用:nonmatching输入值,在模拟仿真软件生成一个错误。金宝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默认值(红色)* /输出= 0;如果((输入> = 0)& &(输入< = 2)){/ *输出值设置为输入值如果它属于BasicColors * /输出=输入;}返回输出;}
如果块的浸透在整数溢出参数是禁用的,这个函数没有出现在生成的代码。
生成的代码不支持日志记录枚举数据。金宝app
金宝appSimulink.data.getEnumTypeInfo|金宝appSimulink.defineIntEnumType|枚举
金宝appSimulink.data.getEnumTypeInfo
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
选择一个网站翻译内容,看到当地事件和提供。根据你的位置,我们建议您选择:。
你也可以从下面的列表中选择一个网站:
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。
联系你当地的办公室
得到审判现在