В этом примере показано, как создать код для функции, использующей перечисляемые типы. В этом примере перечисляемые типы наследуют от базового типа int32. Базовый тип может быть int8, uint8, int16, uint16, или int32.
Определение перечисляемого типа sysMode. Сохранить в sysMode.m на тракте MATLAB ®.
< include > sysMode.m </include >
Определение перечисляемого типа LEDcolor. Сохранить в LEDcolor.m на пути MATLAB.
< include > LEDcolor.m </include >
Определение функции displayState, которая использует перечислимые данные для активации светодиодного дисплея на основе состояния устройства. displayState загорается зеленый светодиодный индикатор, указывающий на состояние ВКЛ. Он загорается красным светодиодным индикатором для индикации состояния OFF.
< include > displayState.m </include >
Создание функции MEX для displayState. Укажите, что displayState принимает один входной аргумент, имеющий перечисляемый тип данных sysMode.
codegen displayState -args {sysMode.ON}
Code generation successful.
Протестируйте функцию MEX.
displayState_mex(sysMode.OFF)
ans = RED
Создание статической библиотеки для функции displayState. Укажите, что displayState принимает один входной аргумент, имеющий перечисляемый тип данных sysMode.
codegen -config:lib displayState -args {sysMode.ON}
Code generation successful.
кодеген генерирует статическую библиотеку C с именем по умолчанию, displayState. Он создает вспомогательные файлы в папке по умолчанию, codegen/lib/displayState.
Просмотр файла заголовка displayState_types.h.
type codegen/lib/displayState/displayState_types.h/*
* File: displayState_types.h
*
* MATLAB Coder version : 5.2
* C/C++ source code generated on : 21-Apr-2021 01:25:37
*/
#ifndef DISPLAYSTATE_TYPES_H
#define DISPLAYSTATE_TYPES_H
/* Include Files */
#include "rtwtypes.h"
/* Type Definitions */
#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 */
#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 */
#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)