exponenta event banner

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

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

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

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

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

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

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

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

Операция

Предшествование

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

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

a ^ b

0

Власть.

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

Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделе Включение C-разрядных операций.

a * b

1

Умножение.

Умножение.

a / b

1

Дивизия.

Дивизия.

a %% b

1

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

Остаток. Неинтегренные операнды сначала преобразуются в целые числа.

a + b

2

Дополнение.

Дополнение.

a - b

2

Вычитание.

Вычитание.

a >> b

3

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

Изменение a вправо по b биты. Дополнительные сведения см. в разделе Побитовые операции.

a << b

3

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

Изменение a слева по b биты. Дополнительные сведения см. в разделе Побитовые операции.

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 функция.

  • Побитовое И (по умолчанию). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций.

  • Логический И. Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций.

Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations.

a ^ b

7

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

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

a | b

8

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

  • Побитовое ИЛИ (по умолчанию). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций.

  • Логическое ИЛИ. Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций.

Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations.

a && b

9

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

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

a || b

10

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

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

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

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

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

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

Операция

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

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

~a

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

  • Побитовый НЕТ (по умолчанию). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций.

  • Логический NOT. Включите эту операцию, очистив свойство Включить диаграмму C-разрядных операций.

Дополнительные сведения см. в разделах 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

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

Назначение номеров с фиксированной точкой. См. раздел Переопределение продвижения с фиксированной точкой в диаграммах C.

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 (побитовое И). Включите эту операцию, выбрав свойство Включить диаграмму C-разрядных операций. Дополнительные сведения см. в разделах Bitwise Operations и Enable C-bit operations.

a ^= b

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

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

a |= b

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

Эквивалентно 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 биты.

За исключением операций сдвига битов 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 в качестве языка действий.

Операция

Описание

&a

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

*a

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

Например, модель sf_bus_demo содержит пользовательскую функцию C, которая принимает указатели в качестве аргументов. Когда диаграмма вызывает пользовательскую функцию кода, она использует & для передачи данных 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). Сведения о разработке пользовательских библиотек замены кода см. в разделе Что такое настройка замены кода? (Встроенный кодер) и Код, который можно заменить из моделей Simulink (Встроенный кодер).

Связанные темы