Поддерживаемые операции для данных графика

Stateflow® графики в Simulink® модели имеют свойство языка действий, которое задает операции, которые можно использовать в действиях состояния и перехода. Языковые свойства:

  • MATLAB® как язык действий.

  • C как язык действия.

Для получения дополнительной информации смотрите Различия между MATLAB и C как синтаксис языка действий.

Двоичные операции

Эта таблица суммирует интерпретацию всех двоичных операций в диаграммах Stateflow в соответствии с их порядком приоритета (0 = самый высокий, 10 = самый низкий). Двоичные операции являются ассоциативными слева, так что в любом выражении операторы с таким же приоритетом оцениваются слева направо. Порядок оценки других операций не определен. Для примера в этом присвоении

A = f() > g();
порядок оценки f() и g() не задан. Для более предсказуемых результатов рекомендуется разделить выражения, которые зависят от порядка оценки, на несколько операторов.

Операция

Приоритет

MATLAB как язык действий

C как язык действий

a ^ b

0

Степень.

Степень. Эта операция эквивалентна функции библиотеки C pow. Операнды сначала приводятся к числам с плавающей запятой. Для получения дополнительной информации см. раздел «Вызов функций библиотеки C».

Включите эту операцию, очистив свойство Enable C-bit operations chart. Для получения дополнительной информации смотрите Включить C-битные операции.

a * b

1

Умножение.

Умножение.

a / b

1

Деление.

Деление.

a %% b

1

Не поддерживается. Используйте rem или mod функция.

Остаток. Нецелочисленные операнды сначала приводятся к целым числам.

a + b

2

Сложение.

Сложение.

a - b

2

Вычитание.

Вычитание.

a >> b

3

Не поддерживается. Используйте bitshift функция.

Сдвиг a направо по b биты. Для получения дополнительной информации смотрите Bitwise Operations.

a << b

3

Не поддерживается. Используйте bitshift функция.

Сдвиг a налево по b биты. Для получения дополнительной информации смотрите Bitwise Operations.

a > b

4

Сравнение, больше чем.

Сравнение, больше чем.

a < b

4

Сравнение, меньше чем.

Сравнение, меньше чем.

a >= b

4

Сравнение, больше или равно.

Сравнение, больше или равно.

a <= b

4

Сравнение, меньше или равно.

Сравнение, меньше или равно.

a == b

5

Сравнение, равное.

Сравнение, равное.

a ~= b

5

Сравнение, не равное.

Сравнение, не равное.

a != b

5

Не поддерживается. Используйте операционную a ~= b.

Сравнение, не равное.

a <> b

5

Не поддерживается. Используйте операционную a ~= b.

Сравнение, не равное.

a & b

6

Логический И. Для побитовых И используйте bitand функция.

  • Побитовые И (по умолчанию). Включите эту операцию, выбрав свойство Enable C-bit operations chart.

  • Логический И. Включите эту операцию, очистив свойство Enable C-bit operations chart.

Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

a ^ b

7

Не поддерживается. Для битового XOR используйте bitxor функция.

Битовый XOR (по умолчанию). Включите эту операцию, выбрав свойство Enable C-bit operations chart. Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

a | b

8

Логический OR. Для побитовых ИЛИ используйте bitor функция.

  • Побитовое OR (по умолчанию). Включите эту операцию, выбрав свойство Enable C-bit operations chart.

  • Логический OR. Включите эту операцию, очистив свойство Enable C-bit operations chart.

Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

a && b

9

Логический И.

Логический И.

a || b

10

Логический OR.

Логический OR.

Унарные операции и действия

В этой таблице обобщена интерпретация всех унарных операций и действий в диаграммах Stateflow. Унарные операции:

  • Имеют более высокий приоритет, чем двоичные операторы.

  • Правые ассоциативные так, что в любом выражении они вычисляются справа налево.

Операция

MATLAB как язык действий

C как язык действий

~a

Логический NOT. Для побитового NOT используйте bitcmp функция.

  • Bitwise NOT (по умолчанию). Включите эту операцию, выбрав свойство Enable C-bit operations chart.

  • Логический NOT. Включите эту операцию, очистив свойство Enable C-bit operations chart.

Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

!a

Не поддерживается. Используйте операционную ~a.

Логический NOT.

-a

Отрицательный.

Отрицательный.

a++

Не поддерживается. Используйте выражение a = a+1.

Шаг. Эквивалентно a = a+1.

a--

Не поддерживается. Используйте выражение a = a-1.

Уменьшение. Эквивалентно a = a-1.

Операции назначения

В этой таблице обобщена интерпретация операций назначения в диаграммах Stateflow.

Операция

MATLAB как язык действий

C как язык действий

a = b

Простое назначение.

Простое назначение.

a := b

Не поддерживается. Используйте операции приведения типов, чтобы переопределить правила продвижения с фиксированной точкой. См. Раздел Операций приведения типов»

Присвоение номеров с фиксированной точкой. Смотрите Переопределение промоакции с фиксированной точкой в графиках С.

a += b

Не поддерживается. Используйте выражение a = a+b.

Эквивалентно a = a+b.

a -= b

Не поддерживается. Используйте выражение a = a-b.

Эквивалентно a = a-b.

a *= b

Не поддерживается. Используйте выражение a = a*b.

Эквивалентно a = a*b.

a /= b

Не поддерживается. Используйте выражение a = a/b.

Эквивалентно a = a/b.

a &= b

Не поддерживается. Используйте выражение a = bitand(a,b).

Эквивалентно a = a&b (bitwise AND). Включите эту операцию, выбрав свойство Enable C-bit operations chart. Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

a ^= b

Не поддерживается. Используйте выражение a = bitxor(a,b).

Эквивалентно a = a^b (bitwise XOR). Включите эту операцию, выбрав свойство Enable C-bit operations chart. Для получения дополнительной информации см. Bitwise Operations и Enable C-bit operations.

a |= b

Не поддерживается. Используйте выражение a = bitor(a,b).

Эквивалентно 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.
~aBitwise NOT.

a >> b

Сдвиг a направо по b биты.

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 в качестве языка действий.

Операция

Описание

&a

Операция адреса. Используйте с пользовательским кодом и переменными Stateflow.

*a

Операция указателя. Используйте только с пользовательскими переменными кода.

Для примера, модель 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
Если целевой размер целого числа составляет 32 бита, тогда вы не можете заменить это выражение оператором сложения из библиотеки замены кода и получить подписанный 16-битный результат без потери точности.

Для получения дополнительной информации об использовании библиотек замещения кода, которые MathWorks® предоставляет, см. Что такое замена кода? (Simulink Coder) и библиотеки замены кода (Simulink Coder). Для получения информации о разработке пользовательских библиотек замещения кода смотрите Что такое индивидуальная настройка замещения кода? (Embedded Coder) и код, который можно заменить из моделей Simulink (Embedded Coder).

Похожие темы