主要内容

枚举的代码生成

枚举表示一组固定的命名值。枚举有助于你的MATLAB®代码和生成的C/ c++代码可读性更强。例如,生成的代码可以用如下代码测试是否相等if (x ==红色)而不是使用比较字符串要生成C/ c++代码,必须具备金宝app®编码器™

类中使用枚举时MATLAB函数Block,要遵守这些限制条件:

  • 不支持调用枚举类的方法。金宝app

  • 不支持将字符串或字符向量传递给枚举的构造函数。金宝app

  • 对于一个MATLAB函数块时,可以通过使用导入外部定义的类型金宝appSimulink.defineIntEnumType或者您可以定义一个枚举类。枚举类必须从以下基类型之一派生:金宝app仿真软件。IntEnumTypeint8uint8int16uint16,或int32.看到定义MATLAB函数块的枚举

  • 只能对枚举使用有限的一组操作。看到枚举上允许的操作

  • 使用带有支持枚举类型的函数的枚举来生成代码。金宝app看到支持枚举的MATLAB工具箱函数金宝app

定义枚举MATLAB函数

的枚举MATLAB函数阻碍有两种方式:

  • 要导入外部定义的枚举,请使用金宝appSimulink.defineIntEnumType函数。看到导入外部定义的枚举到MATLAB

  • 在类定义文件中,定义枚举类型。例如:

    classdef PrimaryColors <金宝app仿真软件。IntEnumType红色(1),蓝色(2),黄色(4)结束结束

如果在类定义文件中定义枚举类型,则该类必须派生于以下基类型之一:金宝app仿真软件。IntEnumTypeint8uint8int16uint16,或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)结束结束
此枚举类型定义产生以下C代码:
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);

  • 只能转换编译时标量值枚举。例如,这段代码在MATLAB中运行,但在代码生成中产生错误:

    y2 = string(repmat(LEDcolor.RED,1,2));
  • 当转换输入为常量时,代码生成器保留枚举名称。例如,考虑以下枚举类型定义:

    classdef AnEnum < int32 enumeration zero(0), two(2), otherTwo(2) end结束

    生成的代码产生“两个”

    y = string(anenumel .two)
    而且“otherTwo”
    y = string(anenumel . othertwo)

索引操作

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工具箱函数的枚举:

相关的话题