В этом примере показано, как сгенерировать код для функции, которая использует перечислимые типы. В этом примере перечислимые типы наследовали от базового типа 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
.
type codegen/lib/displayState/displayState_types.h
/* * File: displayState_types.h * * MATLAB Coder version : 5.0 * C/C++ source code generated on : 29-Jan-2020 13:44:05 */ #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)