В этом примере показано, как сгенерировать код для функции, которая использует перечисленные типы. В этом примере перечисленные типы наследуются от базового типа int32
. Базовый тип может быть int8
, uint8
, int16
, uint16
, или int32
.
Задайте перечисляемый тип sysMode
. Храните его в sysMode.m
по пути MATLAB ®.
< включить > sysMode.m </включить >
Задайте перечисляемый тип LEDcolor
. Храните его в LEDcolor.m
на пути MATLAB.
< включить > LEDcolor.m </включить >
Определите функцию displayState
, который использует перечисленные данные для активации светодиодного отображения, основанного на состоянии устройства. displayState
освещает зелёное светодиодное отображение, чтобы указать состояние ON. Он освещает красное светодиодное отображение для индикации состояния 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.
codegen генерирует статическую библиотеку на 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)