Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать ваш 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, switch, while |
if state == sysMode.ON led = LEDcolor.GREEN; else led = LEDcolor.RED; end |
— |
Для генерации кода можно использовать перечисления с этими функциями тулбокс: