Сгенерируйте код для ВЕДОМОЙ функции управления, которая использует перечислимые типы

Этот пример показывает, как сгенерировать код для функции, которая использует перечислимые типы. В этом примере перечислимые типы наследовали от базового типа int32. Базовым типом может быть int8, uint8, int16, uint16 или int32.

Задайте перечислимый тип sysMode. Сохраните его в sysMode.m на пути MATLAB.

classdef sysMode < int32
    enumeration
        OFF(0),
        ON(1)
    end
end

Задайте перечислимый тип LEDcolor. Сохраните его в LEDcolor.m на пути MATLAB.

classdef LEDcolor < int32
    enumeration
        GREEN(1),
        RED(2)
    end
end

Задайте функциональный displayState, который использует перечислимые данные, чтобы активировать светодиодный дисплей, на основе состояния устройства. displayState освещает зеленый светодиодный дисплей, чтобы указать на состояние ON. Это освещает красный светодиодный дисплей, чтобы указать на состояние OFF.

function led = displayState(state)
%#codegen

if state == sysMode.ON
    led = LEDcolor.GREEN;
else
    led = LEDcolor.RED;
end


Сгенерируйте MEX-функцию для displayState. Укажите, что displayState берет один входной параметр, который имеет перечислимый тип данных sysMode.

codegen displayState -args {sysMode.ON}

Протестируйте MEX-функцию.

displayState_mex(sysMode.OFF)
ans = 

  LEDcolor enumeration

    RED

Сгенерируйте статическую библиотеку для функционального displayState. Укажите, что displayState берет один входной параметр, который имеет перечислимый тип данных sysMode.

codegen -config:lib displayState -args {sysMode.ON}

codegen генерирует статическую библиотеку C с именем по умолчанию, displayState. Это генерирует вспомогательные файлы в папке по умолчанию, codegen/lib/displayState.

Просмотрите заголовочный файл displayState_types.h h.

type codegen/lib/displayState/displayState_types.h
/*
 * Prerelease License - for engineering feedback and testing purposes
 * only. Not for sale.
 * File: displayState_types.h
 *
 * MATLAB Coder version            : 4.1
 * C/C++ source code generated on  : 11-Jul-2018 11:41:56
 */

#ifndef DISPLAYSTATE_TYPES_H
#define DISPLAYSTATE_TYPES_H

/* Include Files */
#include "rtwtypes.h"

/* Type Definitions */
#ifndef enum_LEDcolor
#define enum_LEDcolor

enum LEDcolor
{
  GREEN = 1,                           /* Default value */
  RED
};

#endif                                 /*enum_LEDcolor*/

#ifndef typedef_LEDcolor
#define typedef_LEDcolor

typedef enum LEDcolor LEDcolor;

#endif                                 /*typedef_LEDcolor*/

#ifndef enum_sysMode
#define enum_sysMode

enum sysMode
{
  OFF = 0,                             /* Default value */
  ON
};

#endif                                 /*enum_sysMode*/

#ifndef typedef_sysMode
#define typedef_sysMode

typedef enum sysMode sysMode;

#endif                                 /*typedef_sysMode*/
#endif

/*
 * File trailer for displayState_types.h
 *
 * [EOF]
 */

LEDcolor перечислимого типа представлен как перечислимый тип C, потому что базовым типом в определении класса для LEDcolor является int32. Когда базовым типом является int8, uint8, int16 или uint16, генератор кода производит typedef для перечислимого типа. Это производит операторы #define для значений перечислимого типа. Например:

typedef short LEDcolor;
#define GREEN ((LEDcolor)1)
#define RED ((LEDcolor)2)

Похожие темы

Была ли эта тема полезной?