主要内容

金宝app支持图表数据操作

Stateflow®图表在仿真软件金宝app®模型有一个操作语言属性,该属性定义可以在状态和转换操作中使用的操作。语言属性是:

  • MATLAB®作为行动语言。

  • C作为行动语言。

有关更多信息,请参见作为动作语言语法的MATLAB与C的区别

二元运算

该表根据状态流图中所有二进制操作的优先级顺序(0 =最高,10 =最低)总结了对它们的解释。二元运算是左关联的,因此在任何表达式中,具有相同优先级的运算符从左到右计算。其他操作的求值顺序未指定。例如,在这个作业中

A = f() > g();
评价的顺序f ()g ()是未指定的。对于更可预测的结果,将依赖于求值顺序的表达式分割成多个语句是一种良好的编码实践。

操作

优先级

作为行动语言的MATLAB

C语言作为行动语言

a ^

0

权力。

权力。这个操作相当于C库函数战俘.操作数首先被转换为浮点数。有关更多信息,请参见调用C库函数

通过清除使c位操作图表属性。有关更多信息,请参见使c位操作

a * b

1

乘法。

乘法。

a / b

1

部门。

部门。

% % b

1

不受支持金宝app的。使用快速眼动国防部函数。

余数。非整数操作数首先被转换为整数。

a + b

2

加法。

加法。

a - b

2

减法。

减法。

一个> > b

3.

不受支持金宝app的。使用bitshift函数。

转变一个向右靠b位。有关更多信息,请参见按位操作

< < b

3.

不受支持金宝app的。使用bitshift函数。

转变一个左边的b位。有关更多信息,请参见按位操作

a >

4

比较,大于。

比较,大于。

< b

4

相比之下,不到。

相比之下,不到。

> = b

4

比较,大于或等于。

比较,大于或等于。

< = b

4

比较,小于或等于。

比较,小于或等于。

a = =

5

比较,等于。

比较,等于。

~ = b

5

比较,不等于。

比较,不等于。

一个= b !

5

不受支持金宝app的。使用操作~ = b

比较,不等于。

< > b

5

不受支持金宝app的。使用操作~ = b

比较,不等于。

a和b

6

逻辑。对于位与,使用bitand函数。

  • 位和(默认)。通过选择使c位操作图表属性。

  • 逻辑。通过清除使c位操作图表属性。

有关更多信息,请参见按位操作使c位操作

a ^

7

不受支持金宝app的。对于按位的异或,使用bitxor函数。

位XOR(默认)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作使c位操作

a |

8

逻辑或。对于按位或,请使用bitor函数。

  • 按位或(默认)。通过选择使c位操作图表属性。

  • 逻辑或。通过清除使c位操作图表属性。

有关更多信息,请参见按位操作使c位操作

& & b

9

逻辑。

逻辑。

一个| | b

10

逻辑或。

逻辑或。

一元操作和动作

该表总结了状态流图中所有一元操作和动作的解释。一元操作:

  • 具有比二元运算符更高的优先级。

  • 是右关联的,因此,在任何表达式中,它们是从右到左计算的。

操作

作为行动语言的MATLAB

C语言作为行动语言

~一个

逻辑。对于按位的NOT,使用bitcmp函数。

  • 位(默认)。通过选择使c位操作图表属性。

  • 逻辑。通过清除使c位操作图表属性。

有关更多信息,请参见按位操作使c位操作

!

不受支持金宝app的。使用操作~一个

逻辑。

——一个

负的。

负的。

+ +

不受支持金宝app的。使用表达式= + 1

增量。相当于= + 1

一个,

不受支持金宝app的。使用表达式a = a - 1

减量。相当于a = a - 1

赋值操作

该表总结了状态流图中赋值操作的解释。

操作

作为行动语言的MATLAB

C语言作为行动语言

a = b

简单的任务。

简单的任务。

a: b =

不受支持金宝app的。使用类型强制转换操作覆盖定点提升规则。看到类型转换操作

定点编号的分配。看到在C图表中覆盖定点推广

+ = b

不受支持金宝app的。使用表达式一个= a + b

相当于一个= a + b

a - b =

不受支持金宝app的。使用表达式一个= a - b

相当于一个= a - b

* = b

不受支持金宝app的。使用表达式= a * b

相当于= a * b

a / b =

不受支持金宝app的。使用表达式一个= a / b

相当于一个= a / b

& = b

不受支持金宝app的。使用表达式一个= bitand (a, b)

相当于一个=方式(位)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作使c位操作

^ = b

不受支持金宝app的。使用表达式一个= bitxor (a, b)

相当于= ^ b(按位异或)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作使c位操作

| = b

不受支持金宝app的。使用表达式一个= bitor (a, b)

相当于= | b(按位或)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作使c位操作

类型转换操作

若要将一种类型的值转换为另一种类型的值,请使用类型转换操作。可以将数据强制转换为显式类型或另一个变量的类型。

转换为显式数据类型

要将数值表达式转换为显式数据类型,请使用如下形式的MATLAB类型转换函数:

< type_fun >表达式

< type_fun >类型转换函数是可以的吗int32int16int8uint32uint16uint8,或fi(定点设计师)< type_fun >也可以布尔int64,或uint64.例如,该语句强制转换表达式x + 3为16位无符号整数,并将其值赋给数据y

y = uint16 (x + 3)

或者,在使用MATLAB作为操作语言的图表中,您可以使用函数带有type关键字< type_key >

演员(表达式< type_key >

关键词类型包括“双”“单一”“int32”“int16”“int8”“uint32”“uint16”,“uint8”.例如,如上例所示,该语句强制转换表达式x + 3赋给一个16位无符号整数y

y =投(x + 3,“uint16”)

基于其他数据的Cast类型

为了简化类型转换,可以根据其他数据的类型转换数值表达式的类型。

在以MATLAB为动作语言的图表中,调用函数的关键字“喜欢”.例如,该语句转换的值x + 3转换为与数据相同的类型z并将其分配给y

y =投(x + 3,“喜欢”,z)
在本例中,数据z可以有任何可接受的状态流类型。

在使用C语言作为动作语言的图表中,类型操作符返回现有statflow数据的类型。类型中使用此返回值代替显式类型操作。例如,该语句转换的值x + 3转换为与数据相同的类型z并将其分配给y

铸造(x + 3,类型(z))

按位操作

该表总结了状态流图中使用C作为操作语言的所有位操作的解释。

操作

描述
a和b 位和。
a | 位或。
a ^ 按位异或。
~一个 位没有。

一个> > b

转变一个向右靠b位。

< < b

转变一个左边的b位。

除了位移位操作一个> > b< < b,则必须通过选择使c位操作图表属性。看到使c位操作

按位运算在二进制级别处理整数。非整数操作数首先被转换为整数。整数操作数遵循C提升规则来确定结果的中间值。然后将该中间值转换为您为操作结果指定的类型。

请注意

使用MATLAB作为操作语言的图表不支持位操作。金宝app相反,使用函数bitandbitorbitxorbitnot,或bitshift

位操作和整数溢出

用于指定按位操作的中间值的隐式强制转换可能导致溢出。若要保留结果的最右边位并避免意外行为,请禁用图表属性Saturate on Integer溢出

例如,该模型中的两个图都计算按位操作y = ~你.图表通过使用32位的目标整数大小来计算这个操作的中间值,因此这个值中最左边的24位都是1。当图表将中间值赋给y演员uint8导致整数溢出。每个图表的输出取决于图表如何处理整数溢出。

  • 如果饱和整数溢出启用时,图表将使按位操作的结果饱和并输出一个零值。

  • 如果饱和整数溢出禁用时,图表将包装按位操作的结果并输出其最右边的8位。

有关更多信息,请参见整数溢出饱和

指针和地址操作

该表总结了使用C作为操作语言的状态流图中的指针和地址操作的解释。

操作

描述

地址操作。与自定义代码和状态流变量一起使用。

*一个

指针操作。仅用于自定义代码变量。

例如,模型sf_bus_demo包含一个接受指针作为参数的自定义C函数。当图表调用自定义代码函数时,它使用操作通过地址传递statflow数据。有关更多信息,请参见在状态流图中集成自定义结构

使用MATLAB作为操作语言的图表不支持指针和地址操作。金宝app指向结构的指针只能在只读模式下使用,并且只在传递它们的调用期间有效。

用应用程序实现替换操作

如果你有嵌入式编码器®金宝app仿真软件编码器™,您可以配置代码生成器,以便在代码生成期间应用代码替换库(CRL)。代码生成器更改为操作生成的代码,以满足应用程序需求。使用Embedded Coder,您可以开发和应用自定义代码替换库。

代码替换库的操作项可以指定整型或定点操作数和结果模式。您可以使用这些操作的操作项:

  • 除了+

  • 减法-

  • 乘法

  • 部门/

例如,在这个表达式中,可以替换加法运算符+使用特定于目标的实现u1u2,y具有允许与代码替换库中的添加项匹配的类型:

y = u1 + u2

C图表语义限制运算符条目匹配,因为图表使用目标整数大小作为算术表达式中的中间类型。例如,这个算术表达式计算一个目标整数的中间加法:

Y = (u1 + u2) % 3
如果目标整数大小为32位,则不能使用代码替换库中的加法操作符替换该表达式,并在不降低精度的情况下生成有符号的16位结果。

有关使用MathWorks的代码替换库的详细信息®提供,请参阅什么是代码替换?(金宝app仿真软件编码器)代码替换库(金宝app仿真软件编码器).有关开发自定义代码替换库的信息,请参见什么是代码替换定制?(嵌入式编码)可以从Simulink模型中替换的代码金宝app(嵌入式编码)

相关的话题