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

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

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

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

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

Бинарные операции

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

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

Операция

Приоритет

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

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

a ^ b

0

Степень.

Степень. Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit. Смотрите Задают Свойства для диаграмм Stateflow.

a, B

1

Умножение.

Умножение.

a / b

1

Деление.

Деление.

a %% b

1

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

Остаток. Операнды нецелого числа сначала брошены к целым числам.

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

Логический AND. Для поразрядного AND используйте функцию bitand.

  • Поразрядный AND (значение по умолчанию). Операнды нецелого числа сначала брошены к целым числам. Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit.

  • Логический AND. Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit.

Смотрите задают свойства для диаграмм Stateflow.

a ^ b

7

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

Поразрядный XOR (значение по умолчанию). Операнды нецелого числа сначала брошены к целым числам. Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Смотрите Задают Свойства для диаграмм Stateflow.

a | b

8

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

  • Битовое "ИЛИ" (значение по умолчанию). Операнды нецелого числа сначала брошены к целым числам. Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit.

  • Логический OR. Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit.

Смотрите задают свойства для диаграмм Stateflow.

a && b

9

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

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

a || b

10

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

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

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

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

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

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

Операция

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

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

~a

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

  • Битовое "НЕ" (значение по умолчанию). Операнды нецелого числа сначала брошены к целым числам. Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit.

  • Логический НЕТ. Включите эту операцию путем очистки Разрешения свойства диаграммы операций C-bit.

Смотрите задают свойства для диаграмм Stateflow.

!a

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

Логический НЕТ.

-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 (поразрядный AND). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Смотрите Задают Свойства для диаграмм Stateflow.

a ^= b

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

Эквивалентный a = a^b (поразрядный XOR). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Смотрите Задают Свойства для диаграмм Stateflow.

a |= b

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

Эквивалентный a = a|b (битовое "ИЛИ"). Включите эту операцию путем выбора Разрешения свойства диаграммы операций C-bit. Смотрите Задают Свойства для диаграмм Stateflow.

Указатель и операции адреса

Эта таблица суммирует интерпретацию указателя и операции адреса в диаграммах Stateflow.

Операция

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

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

&a

Не поддерживаемый.

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

*a

Не поддерживаемый.

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

Например, модель sf_bus_demo содержит пользовательскую функцию C, которая берет указатели в качестве аргументов. Когда график вызывает функцию пользовательского кода, он использует операцию &, чтобы передать данные Stateflow адресом. Для получения дополнительной информации смотрите, Интегрируют Пользовательские Структуры в диаграммах Stateflow.

Введите операции броска

Чтобы преобразовать значение одного типа к значению другого типа, используйте операции броска типа. Можно бросить данные к явному типу или к типу другой переменной.

Бросьте к явному типу данных

Чтобы бросить числовое выражение к явному типу данных, используйте функцию преобразования типов MATLAB формы:

<type_fun>(expression)

<type_fun> является функцией преобразования типов, которая может быть double, single, int32, int16, int8, uint32, uint16 или uint8. В графиках, которые используют C в качестве языка действия, <type_fun> может также быть boolean. Например, этот оператор бросает выражение x+3 к 16-битному беззнаковому целому и присваивает его значение данным y:

y = uint16(x+3)

Также в графиках, которые используют MATLAB в качестве языка действия, можно использовать функцию cast с ключевым словом типа <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))

Замените операции на внедрения приложения

Если у вас есть 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).

Похожие темы