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

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

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

<включайте> sysMode.m </, включают>

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

<включайте> LEDcolor.m </, включают>

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

<включайте> displayState.m </, включают>

Сгенерируйте 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. Когда базовым типом является int8uint8int16, или uint16, генератор кода производит typedef для перечислимого типа. Это производит #define операторы для значений перечислимого типа. Например:

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

Похожие темы