枚举的代码生成
枚举表示一组固定的命名值。枚举有助于你的MATLAB®代码和生成的C/ c++代码可读性更强。例如,生成的代码可以用如下代码测试是否相等if (x ==红色)
而不是使用比较字符串
.要生成C/ c++代码,必须具备金宝app®编码器™.
类中使用枚举时MATLAB函数
Block,要遵守这些限制条件:
不支持调用枚举类的方法。金宝app
不支持将字符串或字符向量传递给枚举的构造函数。金宝app
对于一个MATLAB函数块时,可以通过使用导入外部定义的类型
金宝appSimulink.defineIntEnumType
或者您可以定义一个枚举类。枚举类必须从以下基类型之一派生:金宝app仿真软件。IntEnumType
,int8
,uint8
,int16
,uint16
,或int32
.看到定义MATLAB函数块的枚举.只能对枚举使用有限的一组操作。看到枚举上允许的操作.
使用带有支持枚举类型的函数的枚举来生成代码。金宝app看到支持枚举的MATLAB工具箱函数金宝app.
定义枚举MATLAB函数块
的枚举MATLAB函数阻碍有两种方式:
要导入外部定义的枚举,请使用
金宝appSimulink.defineIntEnumType
函数。看到导入外部定义的枚举到MATLAB.在类定义文件中,定义枚举类型。例如:
classdef PrimaryColors <
金宝app仿真软件。IntEnumType
红色(1),蓝色(2),黄色(4)结束结束
如果在类定义文件中定义枚举类型,则该类必须派生于以下基类型之一:金宝app仿真软件。IntEnumType
,int8
,uint8
,int16
,uint16
,或int32
.然后,可以在之间交换枚举数据MATLAB函数块和模型中的其他Simulink块金宝app。
如果你使用金宝app仿真软件编码器要生成C/ c++代码,可以使用枚举类基类型来控制生成的C/ c++代码中枚举类型的大小。您可以:
将枚举类型表示为可移植到不同目标的固定大小的整数。
减少内存使用。
与遗留代码接口。
符合公司标准。
基类型决定在所生成的C/ c++代码中枚举类型的表示形式。
如果基类型为金宝app仿真软件。IntEnumType
,代码生成器生成一个C枚举类型。考虑下面的MATLAB枚举类型定义:
classdefLEDcolor < 金宝appSimulink。IntEnumType枚举绿(1),红(2)结束结束
此枚举类型定义产生以下C代码:
typedef enum {GREEN = 1, RED} LEDcolor;
类型定义
语句为枚举类型和指定#定义
枚举值的语句。考虑下面的MATLAB枚举类型定义:classdefLEDcolor < int16枚举绿(1),红(2)结束结束
typedef int16_T LEDcolor;#定义绿色((LEDcolor)1) #定义红色((LEDcolor)2
要自定义为枚举类型生成的代码,请参见自定义Simulin金宝appk枚举.
枚举上允许的操作
对于代码生成,您只能对该表中列出的枚举进行操作。
操作 | 例子 | 笔记 |
---|---|---|
赋值运算符: |
xon = LEDcolor。绿色xoff = LEDcolor。红色的 |
- - - - - - |
关系运算符: |
Xon == xoff |
代码生成不支持使用金宝app |
铸造操作 |
双(LEDcolor.RED) |
- - - - - - |
转换为字符数组或字符串 |
y = char(LEDcolor.RED);y1 = cast(LEDcolor.RED,'char');y2 = string(LEDcolor.RED); |
|
索引操作 |
m = [1 2] n = LEDcolor(m) p = n(LEDcolor. green) |
- - - - - - |
控制流程:if, switch, while |
if state == sysMode。ON led = LEDcolor.GREEN;else led = LEDcolor.RED;结束 |
- - - - - - |
MATLAB支持枚举的工具箱函数金宝app
对于代码生成,您可以使用这些MATLAB工具箱函数的枚举: