このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
列挙型のコードの生成
列挙型は名前付きの値の固定セットを表します。 列挙型を使用すると、MATLAB® コードと生成される C/C++ コードが読みやすくなります。たとえば、strcmp
を使用する代わりに、生成されたコードで if (x == Red)
などのコードとの等価性をテストできます。C/C++ コードを生成するには、Simulink® Coder™ がなければなりません。
MATLAB Function
ブロックで列挙型を使用する場合は、次の制限に従います。
列挙型クラスのメソッドの呼び出しはサポートされません。
string または文字ベクトルを列挙型のコンストラクターに渡すことはサポートされません。
MATLAB Function ブロックの場合、
Simulink.defineIntEnumType
を使用して外部で定義された型をインポートしたり、列挙型クラスを定義したりできます。列挙型クラスはSimulink.IntEnumType
、int8
、uint8
、int16
、uint16
またはint32
のいずれかの基本データ型から派生されなければなりません。MATLAB Function ブロックの列挙型の定義を参照してください。列挙型に対しては限られた一連の操作のみを使用できます。列挙型で実行可能な演算を参照してください。
コード生成用に列挙型をサポートする関数で列挙型を使用します。列挙型をサポートする MATLAB ツールボックス関数を参照してください。
MATLAB Function ブロックの列挙型の定義
MATLAB Function ブロックの列挙型は次の 2 つの方法で定義できます。
外部で定義された列挙型をインポートするには、関数
Simulink.defineIntEnumType
を使用します。MATLAB の外部で定義された列挙型のインポートを参照してください。クラス定義ファイルで、列挙型を定義します。以下に例を示します。
classdef PrimaryColors <
Simulink.IntEnumType
enumeration Red(1), Blue(2), Yellow(4) end end
クラス定義ファイルで列挙型を定義する場合、クラスは基本データ型、Simulink.IntEnumType
、int8
、uint8
、int16
、uint16
または int32
のいずれかから派生しなければなりません。次に、モデル内の MATLAB Function ブロックと他の Simulink ブロック間で列挙型データを交換できます。
Simulink Coder を使用して C/C++ コードを生成する場合、列挙型クラスの基本データ型を使用して、生成される C/C++ コード内の列挙型のサイズを制御できます。以下が可能です。
列挙型を固定サイズの整数で表し、別のターゲットへの移植を可能にします。
メモリ使用量を削減します。
レガシ コードと連動させます。
会社標準に一致させます。
基本データ型は、生成された C/C++ コード内の列挙型の表現を決定します。
基本データ型が Simulink.IntEnumType
の場合、コード ジェネレーターは C の列挙型を生成します。次の MATLAB における列挙型の定義について検討します。
classdef LEDcolor < Simulink.IntEnumType enumeration GREEN(1), RED(2) end end
この列挙型の定義は次の C コードになります。
typedef enum { GREEN = 1, RED } LEDcolor;
typedef
ステートメントを生成し、列挙値に対して #define
ステートメントを生成します。次の MATLAB における列挙型の定義について検討します。classdef LEDcolor < int16 enumeration GREEN(1), RED(2) end end
typedef int16_T LEDcolor; #define GREEN ((LEDcolor)1) #define RED ((LEDcolor)2)
列挙型用に生成されたコードをカスタマイズするには、Simulink 列挙型のカスタマイズを参照してください。
列挙型で実行可能な演算
コード生成では、次の表に示す列挙型の演算に制限されます。
演算 | 例 | メモ |
---|---|---|
代入演算子: |
xon = LEDcolor.GREEN xoff = LEDcolor.RED | — |
関係演算子: |
xon == xoff | コード生成では、 |
キャスト演算 |
double(LEDcolor.RED) | — |
文字配列または string への変換 |
y = char(LEDcolor.RED); y1 = cast(LEDcolor.RED,'char'); y2 = string(LEDcolor.RED); |
|
インデックス演算 |
m = [1 2] n = LEDcolor(m) p = n(LEDcolor.GREEN) | — |
制御フロー ステートメント: if、switch、while |
if state == sysMode.ON led = LEDcolor.GREEN; else led = LEDcolor.RED; end | — |
列挙型をサポートする MATLAB ツールボックス関数
コード生成では、次の MATLAB ツールボックス関数で列挙型を使用できます。