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

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

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

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

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

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

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

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

Операция

Приоритет

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

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

a ^ b

0

Степень.

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

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

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

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

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

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

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

a ^ b

7

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

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

a | b

8

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

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

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

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

a && b

9

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

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

a || b

10

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

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

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

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

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

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

Операция

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

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

~a

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

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

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

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

!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. Для получения дополнительной информации смотрите Битовые операции и Включите операции C-bit.

a ^= b

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

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

a |= b

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

Эквивалентный 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> может также быть booleanint64, или uint64. Например, этот оператор бросает выражение x+3 к 16-битному беззнаковому целому и присвоениям его значение к данным y:

y = uint16(x+3)

В качестве альтернативы в графиках, которые используют MATLAB в качестве языка действия, можно использовать cast функция с ключевым словом типа <type_key>:

cast(expression,<type_key>)

Ключевые слова типа включают 'double'единственныйint32int16int8uint32uint16, и '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 биты.

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

Операция

Описание

&a

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

*a

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

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

Похожие темы