Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать код MATLAB ® и сгенерированный код C/C + + более читаемым. Например, сгенерированный код может проверять равенство с кодом, таким какif (x == Red) вместо использования strcmp. Для создания кода C/C + + необходимо наличие Coder™ Simulink ® .
При использовании перечислений в MATLAB Function блокировать, придерживаться следующих ограничений:
Вызовы методов классов перечисления не поддерживаются.
Передача строк или векторов символов конструкторам перечислений не поддерживается.
Для функционального блока MATLAB можно импортировать внешний тип с помощью Simulink.defineIntEnumType или можно определить класс перечисления. Класс перечисления должен быть производным от одного из следующих базовых типов: Simulink.IntEnumType, int8, uint8, int16, uint16, или int32. См. раздел Определение перечислений для функциональных блоков MATLAB.
Для перечислений можно использовать только ограниченный набор операций. См. раздел Разрешенные операции с перечислениями.
Используйте перечисления с функциями, поддерживающими перечисляемые типы для создания кода. См. раздел Функции панели инструментов MATLAB, поддерживающие перечисления.
Перечисления для функциональных блоков MATLAB можно определить двумя способами:
Для импорта внешнего перечисления используйте Simulink.defineIntEnumType функция. См. раздел Импорт перечислений, определенных внешне в MATLAB.
В файле определения класса определите перечисляемый тип. Например:
classdef PrimaryColors < Simulink.IntEnumType
enumeration
Red(1),
Blue(2),
Yellow(4)
end
end При определении перечисляемого типа в файле определения класса класс должен быть производным от одного из следующих базовых типов: Simulink.IntEnumType, int8, uint8, int16, uint16, или int32. Затем можно обмениваться перечисленными данными между функциональными блоками MATLAB и другими блоками 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) |
— |
|
преобразование в символьный массив или строку |
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: