Main Content

列挙型を使用する LED 制御関数のコードの生成

この例では、列挙型を使用する関数のコードを生成する方法を示します。この例での列挙型は基本データ型の int32 を継承します。基本データ型には int8uint8int16uint16int32 または uint32 を使用できます。

列挙型の sysMode を定義します。これを MATLAB® パス上の sysMode.m に保存します。

type sysMode.m
classdef sysMode < int32
    enumeration
        OFF(0),
        ON(1)
    end
end

列挙型の LEDcolor を定義します。これを MATLAB パス上の LEDcolor.m に保存します。

type LEDcolor.m
classdef LEDcolor < int32
    enumeration
        GREEN(1),
        RED(2)
    end
end

関数 displayState を定義します。この関数は列挙データを使用し、デバイスの状態に基づいて LED 表示を有効にします。displayState は ON の状態を示すために緑色の LED 表示を点灯します。また、OFF の状態を示すために赤色の LED 表示を点灯します。

type displayState.m
function led = displayState(state)
%#codegen

if state == sysMode.ON
    led = LEDcolor.GREEN;
else
    led = LEDcolor.RED;
end

displayState の MEX 関数を生成します。displayState が列挙データ型 sysMode をもつ入力引数を 1 つとることを指定します。

codegen displayState -args {sysMode.ON}
Code generation successful.

MEX 関数をテストします。

displayState_mex(sysMode.OFF)
ans = 
  LEDcolor enumeration

    RED

関数 displayState のスタティック ライブラリを生成します。displayState が列挙データ型 sysMode をもつ入力引数を 1 つとることを指定します。

codegen -config:lib displayState -args {sysMode.ON}
Code generation successful.

codegen は既定の名前 displayState をもつ C のスタティック ライブラリを生成します。また、既定のフォルダー codegen/lib/displayState にサポート ファイルを生成します。

ヘッダー ファイル displayState_types.h を表示します。

type codegen/lib/displayState/displayState_types.h
/*
 * Prerelease License - for engineering feedback and testing purposes
 * only. Not for sale.
 * File: displayState_types.h
 *
 * MATLAB Coder version            : 24.1
 * C/C++ source code generated on  : 25-Jan-2024 15:06:19
 */

#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)

関連するトピック