主要内容

枚举的代码生成

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

控件中使用枚举时MATLAB函数Block,坚持以下限制:

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

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

  • 对于一个MATLAB函数块,您可以使用金宝appSimulink.defineIntEnumType也可以定义枚举类。枚举类必须派生自以下基类型之一:金宝app仿真软件。IntEnumTypeint8uint8int16uint16,或int32.看到定义MATLAB函数块枚举

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

  • 将枚举与支持枚举类型的函数一起用于代码生成。金宝app看到支持枚举的MATLAB工具箱函数金宝app

定义枚举MATLAB函数

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

  • 要导入外部定义的枚举,请使用金宝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 <仿金宝app真软件。IntEnumType枚举绿(1),红(2)结束结束

这个枚举类型定义产生了以下C代码:

typedef enum {GREEN = 1, RED} LEDcolor;
对于内置整数基类型,代码生成器将生成类型定义语句#定义枚举值的语句。考虑以下MATLAB枚举类型定义:
classdefLEDcolor < int16枚举绿(1),红(2)结束结束
这个枚举类型定义产生了以下C代码:
typedef int16_T LEDcolor;#define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)

若要自定义为枚举类型生成的代码,请参见自定义模型枚举金宝app

枚举的允许操作

对于代码生成,您只能对该表中列出的枚举进行操作。

操作 例子 笔记

赋值运算符:

发送朴通= LEDcolor。绿色xoff = led颜色。红色的

- - - - - -

关系运算符:< > <= >= == ~=

发送朴通= =发送葡开

代码生成不支持使用金宝app==~=测试枚举成员与字符串数组、字符数组或字符数组的单元格数组之间的相等性。

铸造操作

双(LEDcolor.RED)

- - - - - -

转换为字符数组或字符串

y = char (LEDcolor.RED);日元=投(LEDcolor.RED,“字符”);y2 =字符串(LEDcolor.RED);

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

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

    classdef AnEnum < int32枚举0 (0),2 (2),otherTwo(2)结束结束

    生成的代码生成“两个”

    y =字符串(AnEnum.two)
    “otherTwo”
    y =字符串(AnEnum.otherTwo)

索引操作

m = [1] n = [1] n = [2] n = [2]

- - - - - -

控制流语句:if, switch, while

if state == sysMode。ON led = led color. green;else led = LEDcolor.RED;结束

- - - - - -

MATLAB支持枚举的工具箱函数金宝app

对于代码生成,你可以使用MATLAB工具箱函数中的枚举:

相关的话题