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