主要内容

操作Stateflow数据

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

  • MATLAB®作为行动语言。

  • C作为动作语言。

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

二元运算

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

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

操作

优先级

MATLAB作为动作语言

C作为动作语言

A ^ b

0

权力。

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

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

A * b

1

乘法。

乘法。

A / b

1

部门。

部门。

A %% b

1

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

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

A + b

2

加法。

加法。

A - b

2

减法。

减法。

A b> > b

3.

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

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

A << b

3.

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

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

A b>0 b

4

比较,大于。

比较,大于。

A < b

4

比较,少于。

比较,少于。

A >= b

4

比较,大于或等于。

比较,大于或等于。

A <= b

4

比较,小于或等于。

比较,小于或等于。

A == b

5

比较,等于。

比较,等于。

A ~= b

5

比较,不等于。

比较,不等于。

= b

5

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

比较,不等于。

A < b> b

5

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

比较,不等于。

A & b

6

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

  • 按位与(默认)。启用此操作,请选择启用c位操作图表属性。

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

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

A ^ b

7

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

按位异或(默认)。启用此操作,请选择启用c位操作图表属性。有关更多信息,请参见按位操作启用c位操作

A b|0 b

8

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

  • 按位或(默认)。启用此操作,请选择启用c位操作图表属性。

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

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

A && b

9

逻辑。

逻辑。

A b| | b

10

逻辑或。

逻辑或。

一元操作和动作

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

  • 具有比二元操作符更高的优先级。

  • 是右结合的,因此在任何表达式中,它们都是从右向左求值的。

操作

MATLAB作为动作语言

C作为动作语言

~一个

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

  • 按位NOT(默认)。启用此操作,请选择启用c位操作图表属性。

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

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

!

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

逻辑。

——一个

负的。

负的。

+ +

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

增量。相当于A = A +1

一个,

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

减量。相当于A = A -1

赋值操作

这个表格总结了对状态流图表中赋值操作的解释。

操作

MATLAB作为动作语言

C作为动作语言

A = b

简单的任务。

简单的任务。

A:= b

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

定点数的赋值。看到覆盖C图中的定点提升

A += b

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

相当于A = A +b

A -= b

不受支持金宝app的。使用表达方式A = A -b

相当于A = A -b

A *= b

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

相当于A = A *b

A /= b

不受支持金宝app的。使用表达方式A = A /b

相当于A = A /b

A %%= b

不受支持金宝app的。使用表达方式A = mod(A,b)A = rem(A,b)

相当于A = A %%b

A &= b

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

相当于A = A &b(位)。启用此操作,请选择启用c位操作图表属性。有关更多信息,请参见按位操作启用c位操作

A ^= b

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

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

A |= b

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

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

类型转换操作

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

强制转换为显式数据类型

要将数值表达式强制转换为显式数据类型,请使用以下类型转换函数之一:int8int16int32int64uint8uint16uint32uint64,布尔.例如,下面的语句强制转换表达式x + 3到一个16位无符号整数,并将该值赋给该数据y

Y = uint16(x+3);

或者,在使用MATLAB作为动作语言的图表中,您可以使用功能和指定“替身”“单身”“int8”“int16”“int32”“int64”“uint8”“uint16”“uint32”“uint64”,或“逻辑”作为输入参数。例如,下面的语句强制转换表达式x + 3到一个16位无符号整数,并将值赋给y

Y = cast(x+3,“uint16”);

要将表达式强制转换为定点类型,使用MATLAB作为动作语言的图表支持调用金宝appfi(定点设计师)函数。例如,下面的语句强制转换表达式x + 3作为一个有符号的定点值,字长为8位,分数长度为3位:

Y = fi(x+3,1,8,3);

在使用C作为操作语言的图表中,调用函数使用fixdt(金宝app模型)表达式作为参数。例如,下面的语句强制转换表达式x + 3作为一个有符号的定点值,字长为8位,分数长度为3位:

Y = cast(x+3,fixdt(1,8,3));

基于其他数据强制类型

为了简化类型转换,您可以将数值表达式的类型转换为与另一个statflow数据相同的类型。

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

Y = cast(x+3,“喜欢”, z);

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

Y = cast(x+3,type(z));

按位操作

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

操作

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

A b> > b

转变一个向右走b位。

A << b

转变一个在左边b位。

除了移位操作A b> > bA << b,必须启用所有位操作启用c位操作图表属性。看到启用c位操作

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

请注意

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

位操作和整数溢出

用于分配位操作的中间值的隐式强制转换可能导致溢出。要保留结果的最右位并避免意外行为,请禁用chart属性饱和整数溢出

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

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

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

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

指针和地址操作

这个表格总结了在使用C作为动作语言的状态流图中对指针和地址操作的解释。

操作

描述

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

*一个

指针操作。仅与自定义代码变量一起使用。

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

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

用应用程序实现代替操作

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

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

  • 除了+

  • 减法-

  • 乘法*

  • 部门/

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

Y = u1 + u2

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

Y = (u1 + u2) % 3
如果目标整数大小为32位,则无法用代码替换库中的加法运算符替换此表达式,从而在不损失精度的情况下生成带符号的16位结果。

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

相关的话题