Диаграммы Stateflow ® в моделях Simulink ® имеют свойство языка действий, которое определяет операции, которые можно использовать в действиях состояния и перехода. Свойства языка:
MATLAB ® в качестве языка действий.
C как язык действий.
Дополнительные сведения см. в разделе Различия между MATLAB и C как синтаксисом языка действий.
Эта таблица суммирует интерпретацию всех двоичных операций в диаграммах Stateflow в соответствии с их порядком приоритета (0 = самый высокий, 10 = самый низкий). Бинарные операции остаются ассоциативными, так что в любом выражении операторы с одинаковым приоритетом вычисляются слева направо. Порядок оценки для других операций не указан. Например, в этом присвоении
A = f() > g();
f() и g() не указан. Для более предсказуемых результатов рекомендуется разбивать выражения, зависящие от порядка вычисления, на несколько операторов.
Операция | Предшествование | MATLAB как язык действий | C как язык действий |
|---|---|---|---|
0 | Власть. | Власть. Эта операция эквивалентна функции библиотеки C Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделе Включение C-разрядных операций. | |
1 | Умножение. | Умножение. | |
1 | Дивизия. | Дивизия. | |
1 | Остаток. Неинтегренные операнды сначала преобразуются в целые числа. | ||
2 | Дополнение. | Дополнение. | |
2 | Вычитание. | Вычитание. | |
3 | Не поддерживается. Используйте | Изменение | |
3 | Не поддерживается. Используйте | Изменение | |
4 | Сравнение, больше. | Сравнение, больше. | |
| 4 | Сравнение, меньше. | Сравнение, меньше. |
| 4 | Сравнение, больше или равно. | Сравнение, больше или равно. |
| 4 | Сравнение, меньше или равно. | Сравнение, меньше или равно. |
| 5 | Сравнение, равно. | Сравнение, равно. |
| 5 | Сравнение, не равное. | Сравнение, не равное. |
| 5 | Не поддерживается. Использовать операцию | Сравнение, не равное. |
| 5 | Не поддерживается. Использовать операцию | Сравнение, не равное. |
6 | Логический И. Для побитового И используйте |
Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. | |
7 | Не поддерживается. Для побитового XOR используйте | Побитовый XOR (по умолчанию). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. | |
8 | Логическое ИЛИ. Для побитового ИЛИ используйте |
Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. | |
9 | Логический И. | Логический И. | |
10 | Логическое ИЛИ. | Логическое ИЛИ. |
В этой таблице представлена интерпретация всех унарных операций и действий в диаграммах Stateflow. Унарные операции:
Имеют более высокий приоритет, чем двоичные операторы.
Являются правыми ассоциативными, так что в любом выражении они вычисляются справа налево.
Операция | MATLAB как язык действий | C как язык действий |
|---|---|---|
| Логический NOT. Для побитового NOT используйте |
Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. |
| Не поддерживается. Использовать операцию | Логический NOT. |
| Отрицательный. | Отрицательный. |
| Не поддерживается. Использовать выражение | Приращение. Эквивалентно |
| Не поддерживается. Использовать выражение | Уменьшение. Эквивалентно |
В этой таблице представлена интерпретация операций назначения в диаграммах Stateflow.
Операция | MATLAB как язык действий | C как язык действий |
|---|---|---|
| Простое назначение. | Простое назначение. |
| Не поддерживается. Используйте операции приведения типа для переопределения правил продвижения с фиксированной точкой. См. раздел Операции литейной формы. | Назначение номеров с фиксированной точкой. См. раздел Переопределение продвижения с фиксированной точкой в диаграммах C. |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно |
| Не поддерживается. Использовать выражение | Эквивалентно a = a&b (побитовое И). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. |
| Не поддерживается. Использовать выражение | Эквивалентно a = a^b (побитовое XOR). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. |
| Не поддерживается. Использовать выражение | Эквивалентно a = a|b (побитовое ИЛИ). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations. |
Чтобы преобразовать значение одного типа в значение другого типа, используйте операции приведения типа. Можно привести данные к явному типу или к типу другой переменной.
Чтобы привести числовое выражение к явному типу данных, используйте функцию преобразования типа MATLAB формы:
<type_fun>(expression)
<type_fun> - функция преобразования типов, которая может быть double, single, int32, int16, int8, uint32, uint16, uint8, или fi (Конструктор фиксированных точек). <type_fun> также может быть boolean, int64, или uint64. Например, этот оператор формирует выражение x+3 16-битное целое число без знака и присваивает его значение данным y:
y = uint16(x+3)
Кроме того, в диаграммах, использующих MATLAB в качестве языка действий, можно использовать cast функция с ключевым словом type <type_key>:
cast(expression,<type_key>)
Ключевые слова типа включают 'double', 'single', 'int32', 'int16', 'int8', 'uint32', 'uint16', и 'uint8'. Например, как и в предыдущем примере, этот оператор формирует выражение x+3 16-битному беззнаковому целому числу и присваивает его y:
y = cast(x+3,'uint16')
Для упрощения литья типов можно преобразовать тип числового выражения на основе типов других данных.
В диаграммах, использующих MATLAB в качестве языка действий, вызовите cast функция с ключевым словом 'like'. Например, этот оператор преобразует значение x+3 того же типа, что и данные z и присваивает его y:
y = cast(x+3,'like',z)
z может иметь любой приемлемый тип Stateflow.В диаграммах, которые используют C в качестве языка действий, type возвращает тип существующих данных Stateflow. Используйте это возвращаемое значение вместо явного типа в cast операция. Например, этот оператор преобразует значение x+3 того же типа, что и данные z и присваивает его y:
cast(x+3,type(z))
Эта таблица суммирует интерпретацию всех побитовых операций в диаграммах Stateflow, использующих C в качестве языка действий.
Операция | Описание |
|---|---|
a & b | Побитовые И. |
a | b | Побитовое ИЛИ. |
a ^ b | Побитовый XOR. |
~a | Побитовый НЕТ. |
| Изменение a вправо по b биты. |
| Изменение a слева по b биты. |
За исключением операций сдвига битов a >> b и a << b, необходимо включить все побитовые операции, выбрав свойство Включить диаграмму C-битных операций. См. раздел Включение C-разрядных операций.
Побитовые операции работают над целыми числами на двоичном уровне. Неинтегренные операнды сначала преобразуются в целые числа. Целочисленные операнды следуют правилам продвижения C для определения промежуточного значения результата. Затем это промежуточное значение преобразуется в тип, указанный для результата операции.
Примечание
Побитовые операции не поддерживаются в диаграммах, использующих MATLAB в качестве языка действий. Вместо этого используйте функции bitand, bitor, bitxor, bitnot, или bitshift.
Неявное приведение, используемое для назначения промежуточного значения побитовой операции, может привести к переполнению. Чтобы сохранить самые правые биты результата и избежать неожиданного поведения, отключите свойство диаграммы Saturate on Integer Overflows.
Например, обе диаграммы в этой модели вычисляют побитовую операцию y = ~u. Диаграммы вычисляют промежуточное значение для этой операции, используя целевой размер целого числа 32 бита, так что 24 крайних левых бита в этом значении являются единицами. Когда диаграммы присваивают промежуточное значение y, приведение к uint8 вызывает переполнение целого числа. Выходные данные каждой диаграммы зависят от того, как диаграмма обрабатывает переполнение целых чисел.
Если параметр «Насыщение при переполнении целых чисел» включен, диаграмма насыщает результат побитовой операции и выводит нулевое значение.
Если функция Saturate on Integer Overflow отключена, диаграмма переносит результат побитовой операции и выводит восемь самых правых битов.

Дополнительные сведения см. в разделе Насыщение при переполнении целых чисел.
Эта таблица суммирует интерпретацию операций с указателями и адресами в диаграммах Stateflow, использующих C в качестве языка действий.
Операция | Описание |
|---|---|
| Операция с адресом. Используйте с пользовательским кодом и переменными Stateflow. |
| Операция указателя. Использовать только с пользовательскими переменными кода. |
Например, модель sf_bus_demo содержит пользовательскую функцию C, которая принимает указатели в качестве аргументов. Когда диаграмма вызывает пользовательскую функцию кода, она использует & для передачи данных Stateflow по адресу. Дополнительные сведения см. в разделе Интеграция пользовательских структур в диаграммы потока состояний.
Операции с указателями и адресами не поддерживаются в диаграммах, использующих MATLAB в качестве языка действий.
Если используется Embedded Coder ® или Simulink Coder™, можно настроить генератор кода на применение библиотеки замены кода (CRL) во время создания кода. Генератор кода изменяет код, создаваемый для операций в соответствии с требованиями приложения. С помощью Embedded Coder можно разрабатывать и применять пользовательские библиотеки замены кода.
Записи операций библиотеки замены кода могут задавать интегральный операнд или операнд с фиксированной точкой и шаблоны результатов. Для этих операций можно использовать записи операций:
Дополнение +
Вычитание -
Умножение *
Подразделение /
Например, в этом выражении можно заменить оператор сложения + с целевой реализацией, если u1, u2, и y имеют типы, разрешающие совпадение с дополнительной записью в библиотеке замены кода:
y = u1+u2
Семантика диаграммы C ограничивает соответствие ввода оператора, поскольку диаграмма использует целевой размер целого числа в качестве промежуточного типа в арифметических выражениях. Например, это арифметическое выражение вычисляет промежуточное сложение в целочисленное значение:
y = (u1 + u2) % 3
Дополнительные сведения об использовании библиотек замены кода, предоставляемых MathWorks ®, см. в разделе Что такое замена кода? (Simulink Coder) и библиотеки замены кода (Simulink Coder). Сведения о разработке пользовательских библиотек замены кода см. в разделе Что такое настройка замены кода? (Встроенный кодер) и Код, который можно заменить из моделей Simulink (Встроенный кодер).