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

В этом примере показано, как сгенерировать код для функции, которая использует перечисленные типы. В этом примере перечисленные типы наследуются от базового типа 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)

Похожие темы