Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать ваш код MATLAB® и сгенерировали более читаемый код C/C++. Например, сгенерированный код может протестировать равенство с кодом, таким как if (x == Red)
вместо того, чтобы использовать strcmp
. Чтобы сгенерировать код C/C++, у вас должен быть Simulink® Coder™.
Когда вы используете перечисления в блоке MATLAB Function
, придерживаетесь этих ограничений:
Вызовы методов классов перечисления не поддержаны.
Для блока MATLAB function можно импортировать внешне заданный тип при помощи Simulink.defineIntEnumType
, или можно задать класс перечисления. Класс перечисления должен вывести от одного из этих базовых типов: Simulink.IntEnumType
, int8
, uint8
, int16
, uint16
или int32
. Смотрите Задают Перечисления для блоков MATLAB function.
Можно использовать только ограниченный набор операций на перечислениях. Смотрите Позволенные Операции на Перечислениях.
Используйте перечисления с функциями, которые поддерживают перечислимые типы для генерации кода. Смотрите Функции Тулбокса MATLAB Та Поддержка Перечисления.
Можно задать перечисления для блоков MATLAB function двумя способами:
Чтобы импортировать внешне заданное перечисление, используйте функцию 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
Это определение перечислимого типа приводит к следующему коду С:
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) |
— |
преобразование в символьный массив или строку |
y = char(LEDcolor.RED); y1 = cast(LEDcolor.RED,'char'); y2 = string(LEDcolor.RED); |
|
индексация операции |
m = [1 2] n = LEDcolor(m) p = n(LEDcolor.GREEN) |
— |
операторы управления: если, переключатель, в то время как |
if state == sysMode.ON led = LEDcolor.GREEN; else led = LEDcolor.RED; end |
— |
Для генерации кода можно использовать перечисления с этими функциями тулбокса MATLAB: