Stateflow®图表在仿真软件金宝app®模型具有一个动作语言属性,该属性定义了可以在状态和转换动作中使用的操作。语言属性包括:
MATLAB®作为行动语言。
C作为动作语言。
有关更多信息,请参见作为动作语言语法的MATLAB与C的区别.
该表根据状态流图中所有二进制操作的优先级顺序(0 =最高,10 =最低)总结了对它们的解释。二元运算是左关联的,因此在任何表达式中,具有相同优先级的运算符从左到右计算。其他操作的求值顺序未指定。例如,在这个作业中
A=f()>g();
F()
和G()
是未指明的。为了更加可预测的结果,拆分表达式的良好编码实践是依赖于评估顺序到多个语句的拆分表达。
手术 |
优先级 |
Matlab作为动作语言 |
C语言作为行动语言 |
---|---|---|---|
0 |
权力。 |
权力。这个操作相当于C库函数 通过清除使c位操作图表属性。有关更多信息,请参见使c位操作. |
|
1. |
乘法。 |
乘法。 |
|
1. |
分部。 |
分部。 |
|
1. |
剩余的。非整数操作数首先转换为整数。 |
||
2. |
附加 |
附加 |
|
2. |
减法。 |
减法。 |
|
3. |
不受支持金宝app的。使用 |
移位 |
|
3. |
不受支持金宝app的。使用 |
移位 |
|
4. |
比较,大于。 |
比较,大于。 |
|
|
4. |
相比之下,不到。 |
相比之下,不到。 |
|
4. |
比较,大于或等于。 |
比较,大于或等于。 |
|
4. |
比较,小于或等于。 |
比较,小于或等于。 |
|
5. |
比较,等于。 |
比较,等于。 |
|
5. |
比较,不等于。 |
比较,不等于。 |
|
5. |
不支持。金宝app使用该操作 |
比较,不等于。 |
|
5. |
不支持。金宝app使用该操作 |
比较,不等于。 |
6. |
逻辑。对于位与,使用 |
|
|
7. |
不受支持金宝app的。对于按位的异或,使用 |
位XOR(默认)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作和使c位操作. | |
8. |
逻辑或。对于按位OR,请使用 |
|
|
9 |
逻辑。 |
逻辑。 |
|
10 |
逻辑或。 |
逻辑或。 |
此表总结了状态流程图中所有一元操作和操作的解释。一元操作:
优先于二元运算符更高。
是正确的关联,使其在任何表达式中,它们从向左左右进行评估。
此表总结了状态流程图中赋值操作的解释。
手术 |
Matlab作为动作语言 |
C语言作为行动语言 |
---|---|---|
|
简单的作业。 |
简单的作业。 |
|
不受支持金宝app的。使用类型强制转换操作覆盖定点提升规则。看到类型转换操作. |
定点编号的分配。看到覆盖C图表中的定点提升. |
|
不支持。金宝app请使用表达式 |
相当于 |
|
不支持。金宝app请使用表达式 |
相当于 |
|
不支持。金宝app请使用表达式 |
相当于 |
|
不支持。金宝app请使用表达式 |
相当于 |
|
不支持。金宝app请使用表达式 |
相当于a = a&b (按位和)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作和使c位操作. |
|
不支持。金宝app请使用表达式 |
相当于a=a^b (按位异或)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作和使c位操作. |
|
不支持。金宝app请使用表达式 |
相当于= | b (按位或)。通过选择使c位操作图表属性。有关更多信息,请参见按位操作和使c位操作. |
若要将一种类型的值转换为另一种类型的值,请使用类型转换操作。可以将数据强制转换为显式类型或另一个变量的类型。
要将数值表达式转换为显式数据类型,请使用以下形式的MATLAB类型转换函数:
(表达式)
是一种可以是转换功能双
,单
,INT32.
,int16
,int8
,uint32
,uint16
,uint8
,或fi
.在使用C语言作为行动语言的图表中,
也可以布尔基
,int64
,或uint64
.例如,该语句强制转换表达式x + 3.
为16位无符号整数,并将其值赋给数据Y
:
y = uint16 (x + 3)
或者,在使用MATLAB作为动作语言的图表中,可以使用投
带有类型关键字的函数< type_key >
:
铸造(表达式,< type_key >)
类型关键字包括“双人”
,“单一”
,“int32”
,'int16'
,'int8'
,'uint32'
,“uint16”
,及“uint8”
.例如,如前面的示例中,此语句投射了表达式x + 3.
赋给一个16位无符号整数Y
:
y =施法(x + 3,'uint16')
为了简化类型转换,可以基于其他数据的类型转换数值表达式的类型。
在以MATLAB为动作语言的图表中,调用投
具有关键字的函数“喜欢”
。例如,此语句转换x + 3.
与数据类型相同Z
并分配它Y
:
y =投(x + 3,“喜欢”,z)
Z
可以有任何可接受的状态流类型。
在使用C作为操作语言的图表中类型
操作符返回现有statflow数据的类型。类型中使用此返回值代替显式类型投
活动例如,此语句转换x + 3.
与数据类型相同Z
并分配它Y
:
施放(x + 3,型(z))
该表总结了状态流图中使用C作为操作语言的所有位操作的解释。
手术 |
描述 |
---|---|
A&B. |
位和。 |
a | b |
位或。 |
a^b |
按位异或。 |
〜A. |
按位不。 |
|
移位A. 靠右B 位。 |
|
移位A. 左边B 位。 |
除了位移操作之外一个> > b
和< < b
,则必须通过选择使c位操作图表属性。看见使c位操作.
按位运算在二进制级别处理整数。非整数操作数首先转换为整数。整数操作数遵循C提升规则来确定结果的中间值。然后将此中间值转换为为为操作结果指定的类型。
用于指定按位操作的中间值的隐式强制转换可能导致溢出。若要保留结果的最右边位并避免意外行为,请禁用图表属性Saturate on Integer溢出.
例如,此模型中的两个图表都计算按位运算y=~u
.图表通过使用32位的目标整数大小来计算这个操作的中间值,因此这个值中最左边的24位都是1。当图表将中间值赋给Y
演员uint8
导致整数溢出。每个图表的输出取决于图表如何处理整数溢出。
如果饱和整数溢出启用时,图表将使按位操作的结果饱和并输出一个零值。
如果饱和整数溢出被禁用,图表包裹了按位操作的结果并输出其八个最右边的位。
有关更多信息,请参见饱和整数溢出.
此表总结了使用C作为动作语言的状态溢图中指针和地址操作的解释。
手术 |
描述 |
---|---|
|
地址操作。与自定义代码和extenflamflarbles一起使用。 |
|
指针操作。仅与自定义代码变量一起使用。 |
例如,模型sf_总线演示包含一个将指针作为参数的自定义C函数。当图表调用自定义代码函数时,它使用&
操作通过地址传递statflow数据。有关更多信息,请参见在状态流程图中集成自定义结构.
使用MATLAB作为操作语言的图表不支持指针和地址操作。金宝app
如果你有嵌入式编码器®或金宝appSimulink Coder™,您可以在代码生成期间配置代码生成器以在代码生成中应用代码替换库(CRL)。代码生成器更改其生成操作以满足应用程序要求的代码。使用嵌入式编码器,您可以开发和应用自定义代码替换库。
代码替换库的操作项可以指定整数或定点操作数和结果模式。您可以将操作条目用于以下操作:
附加+
减法-
乘法*
分部/
例如,在此表达式中,可以替换加法运算符+
使用特定于目标的实现,如果u1
,u2
,及Y
具有允许与代码替换库中的添加条目匹配的类型:
y = u1 + u2
C图表语义限制运算符条目匹配,因为图表使用目标整数大小作为算术表达式中的中间类型。例如,这个算术表达式计算一个目标整数的中间加法:
Y =(U1 + U2)%3
有关使用MathWorks的代码替换库的详细信息®提供,请参阅什么是代码替换?(金宝appSimulink编码器)和代码替换库(金宝app仿真软件编码器)。有关开发自定义代码替换库的信息,请参见什么是代码替换定制?(嵌入式编码器)和可以从Simulink模型中替换的代码金宝app(嵌入式编码器)。