这段文档讲的是 状态机语言里 statement(语句)的三类细节,也就是前面提到的 assignment、event raising、operation call,并对每类语句的具体用法进行了说明。我们可以分开理解:
一、Statement 概念回顾
在状态机里,一个动作(action)可以由 语句(statement) 组成。
语句有三种类型:
- 赋值(assignment)
- 触发事件(event raising)
- 调用操作(operation call)
二、Assignments(赋值语句)
- 作用:给变量赋值,或在原有值基础上运算并赋值
- 运算符 :和 C / Java 类似,除了简单赋值
=,还支持复合运算:
| 运算符 | 含义 | |
|---|---|---|
= |
简单赋值 | |
*= |
乘并赋值 | |
/= |
除并赋值 | |
%= |
取模并赋值 | |
+= |
加并赋值 | |
-= |
减并赋值 | |
<<= |
左移并赋值 | |
>>= |
右移并赋值 | |
&= |
位与并赋值 | |
^= |
位异或并赋值 | |
| ` | =` | 位或并赋值 |
示例:
text
counter = 0
counter += 1 // 等价于 counter = counter + 1
mask &= 0x0F // 位与操作
三、Raising an event(触发事件)
- 作用:主动触发一个事件,让状态机做相应处理或转移
- 语法 :
raise eventName - 接口事件 :需要加接口名前缀
interfaceName.eventName
示例:
text
interface intrfc:
out event ev
state SomeState {
always / raise intrfc.ev
}
always / raise intrfc.ev表示在每次 cycle 都触发这个事件
四、Calling an operation(调用操作)
- 作用:调用一个已定义的 operation(函数)
- 语法 :
operationName(param1, param2, ...) - 可选参数:如果 operation 无参数,可以省略括号
示例:
text
localOperation(5, 10)
log("Hello World")
resetMotor()
- 参数可以是表达式:
localOperation(counter + 1, threshold)
五、总结
| 语句类型 | 作用 | 举例 |
|---|---|---|
| assignment | 改变变量的值 | x += 1 |
| event raising | 触发事件 | raise intrfc.ev |
| operation call | 调用函数/操作 | localOperation(5,10) |
💡 理解要点:
- Assignment → 修改状态机内部变量
- Raise → 激活事件,可能导致状态转移
- Operation → 执行自定义逻辑,可操作外部硬件或做计算
如果你愿意,我可以帮你画一张 状态机动作语句图,把 assignment、raise、operation 三类语句在状态行为里如何触发可视化出来,更直观理解。
你希望我画吗?