Stateflow® графики в Simulink® модели имеют свойство языка действия, которое задает операции, которые можно использовать в действиях перехода и состоянии. Свойства языка:
MATLAB® как язык действия.
C как язык действия.
Для получения дополнительной информации смотрите Различия Между MATLAB и C как Синтаксис языка Действия.
Эта таблица суммирует интерпретацию всех бинарных операций в диаграммах Stateflow согласно их порядку очередности (0 = самый высокий, 10 = самый низкий). Бинарные операции левоассоциативны так, чтобы в любом выражении операторы с тем же приоритетом были оценены слева направо. Порядок оценки для других операций не задан. Например, в этом присвоении
A = f() > g();
f()
и g()
не задано. Для более предсказуемых результатов это - хорошая практика кодирования, чтобы разделить выражения, которые зависят от порядка оценки в несколько операторов.
Операция | Приоритет | MATLAB как язык действия | C как язык действия |
---|---|---|---|
0 | Степень. | Степень. Эта операция эквивалентна библиотечной функции C Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit. Для получения дополнительной информации смотрите, Включают операции C-bit. | |
1 | Умножение. | Умножение. | |
1 | Деление. | Деление. | |
1 | Остаток. Операнды нецелого числа сначала брошены до целых чисел. | ||
2 | Сложение. | Сложение. | |
2 | Вычитание. | Вычитание. | |
3 | Не поддерживаемый. Используйте | Переключите | |
3 | Не поддерживаемый. Используйте | Переключите | |
4 | Сравнение, больше, чем. | Сравнение, больше, чем. | |
| 4 | Сравнение, меньше, чем. | Сравнение, меньше, чем. |
| 4 | Сравнение, больше, чем или равный. | Сравнение, больше, чем или равный. |
| 4 | Сравнение, меньше чем или равное. | Сравнение, меньше чем или равное. |
| 5 | Сравнение, равное. | Сравнение, равное. |
| 5 | Сравнение, не равное. | Сравнение, не равное. |
| 5 | Не поддерживаемый. Используйте операцию | Сравнение, не равное. |
| 5 | Не поддерживаемый. Используйте операцию | Сравнение, не равное. |
6 | Логический AND. Для поразрядного AND используйте |
Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. | |
7 | Не поддерживаемый. Для поразрядного XOR используйте | Поразрядный XOR (значение по умолчанию). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. | |
8 | Логический OR. Для битового "ИЛИ" используйте |
Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. | |
9 | Логический AND. | Логический AND. | |
10 | Логический OR. | Логический OR. |
Эта таблица суммирует интерпретацию всех унарных операций и действий в диаграммах Stateflow. Унарные операции:
Имейте более высокий приоритет, чем бинарные операторы.
Правоассоциативны так, чтобы в любом выражении они были оценены справа налево.
Операция | MATLAB как язык действия | C как язык действия |
---|---|---|
| Логический НЕТ. Для битового "НЕ" используйте |
Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. |
| Не поддерживаемый. Используйте операцию | Логический НЕТ. |
| Отрицательный. | Отрицательный. |
| Не поддерживаемый. Используйте выражение | Шаг. Эквивалентный |
| Не поддерживаемый. Используйте выражение | Декремент. Эквивалентный |
Эта таблица суммирует интерпретацию операций присвоения в диаграммах Stateflow.
Операция | MATLAB как язык действия | C как язык действия |
---|---|---|
| Простое присвоение. | Простое присвоение. |
| Не поддерживаемый. Используйте операции броска типа, чтобы заменить правила продвижения фиксированной точки. Смотрите Операции Броска Типа. | Присвоение чисел фиксированной точки. Смотрите Продвижение Фиксированной точки Переопределения в Графиках C. |
| Не поддерживаемый. Используйте выражение | Эквивалентный |
| Не поддерживаемый. Используйте выражение | Эквивалентный |
| Не поддерживаемый. Используйте выражение | Эквивалентный |
| Не поддерживаемый. Используйте выражение | Эквивалентный |
| Не поддерживаемый. Используйте выражение | Эквивалентный a = a&b (поразрядный AND). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. |
| Не поддерживаемый. Используйте выражение | Эквивалентный a = a^b (поразрядный XOR). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. |
| Не поддерживаемый. Используйте выражение | Эквивалентный a = a|b (битовое "ИЛИ"). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit. |
Чтобы преобразовать значение одного типа к значению другого типа, используйте операции броска типа. Можно бросить данные к явному типу или к типу другой переменной.
Чтобы бросить числовое выражение к явному типу данных, используйте функцию преобразования типов 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_key>
:
cast(expression,<type_key>)
Ключевые слова типа включают 'double'
единственный
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 | Поразрядный AND. |
a | b | Битовое "ИЛИ". |
a ^ b | Поразрядный XOR. |
~a | Битовое "НЕ". |
| Переключите a направо b биты. |
| Переключите a налево b биты. |
За исключением операций a >> b
сдвига разряда и
a << b
, необходимо включить все битовые операции путем выбора свойства диаграммы Enable C-bit operations. Смотрите Включают операции C-bit.
Битовые операции работают над целыми числами на бинарном уровне. Операнды нецелого числа сначала брошены до целых чисел. Целочисленные операнды следуют правилам продвижения C определить промежуточное значение результата. Это промежуточное значение затем брошено к типу, который вы задаете для результата операции.
Примечание
Битовые операции не поддерживаются в графиках, которые используют MATLAB в качестве языка действия. Вместо этого используйте функции bitand
, bitor
, bitxor
, bitnot
, или bitshift
.
Неявный бросок, используемый, чтобы присвоить промежуточное значение битовой операции, может привести к переполнению. Чтобы сохранить самые правые биты результата и избежать неожиданного поведения, отключите свойство диаграммы, Насыщают на Целочисленном переполнении.
Например, оба графика в этой модели вычисляют битовую операцию y = ~u
. Графики вычисляют промежуточное значение для этой операции при помощи целевого целочисленного размера 32 битов, таким образом, 24 крайних левых бита в этом значении являются всеми единицами. Когда графики присваивают промежуточное значение y
, бросок к uint8
вызывает целочисленное переполнение. Выход из каждого графика зависит от того, как график обрабатывает целочисленное переполнение.
Если Насыщают на Целочисленном переполнении, включен, график насыщает результат битовой операции и выводит значение нуля.
Если Насыщают на Целочисленном переполнении, отключен, график переносит результат битовой операции и выводит ее восемь самых правых битов.
Для получения дополнительной информации смотрите, Насыщают на целочисленном переполнении.
Эта таблица суммирует интерпретацию указателя и операции адреса в диаграммах Stateflow, которые используют C в качестве языка действия.
Операция | Описание |
---|---|
| Операция Address. Используйте с переменными Stateflow и пользовательским кодом. |
| Операция Pointer. Используйте только с переменными пользовательского кода. |
Например, модель 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).