Перечисления представляют фиксированный набор именованных значений. Перечисления помогают сделать ваш MATLAB® код и сгенерированный более читаемый код C/C++. Например, сгенерированный код может протестировать равенство с кодом, таким как if (x == Red)
вместо того, чтобы использовать strcmp
. Чтобы сгенерировать код C/C++, у вас должен быть Simulink® Coder™.
Когда вы используете перечисления в a 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: