基于QEP的计算器状态机实现与常见陷阱
1. 实现步骤概述
在实现计算器状态机时,需要遵循一系列步骤,以确保状态机的正确构建和高效运行。以下是主要步骤的详细介绍:
1. 枚举信号 :列出状态图中状态机可识别的所有信号,如C、CE、DIGIT_0、DIGIT_1_9等。用户级信号从常量Q_USER_SIG开始偏移,且按照QEP约定,所有信号后缀为_SIG,在状态图中省略该后缀以减少混乱。
2. 定义事件 :许多事件仅包含信号,无需额外参数,可直接表示为QEvent结构的实例。但有些事件需要参数,如DIGIT_1_9_SIG信号只表明1 - 9数字键被按下,需通过key_code参数指定具体按键。
3. 派生特定状态机 :在QEP中,层次状态机通过继承QHsm抽象基类实现。以计算器为例,定义Calc类继承自QHsm,并添加扩展状态变量和状态处理函数。
4. 定义初始伪状态 :初始伪状态用于初始化扩展状态变量并设置状态机的默认状态,通过Q_TRAN()宏指定默认状态。
5. 定义状态处理函数 :每个状态处理函数通常包含一个switch语句,根据事件信号e->sig进行区分处理。若事件被处理,返回Q_HANDLED()或Q_TRAN();若未处理,返回Q_SUPER()让上级状态处理。
6. 编码进入和退出动作 :使用Q_ENTRY_SIG和Q_EXIT_SIG信号执行状态的进入和退出动作,处理完成后返回Q_HANDLED()。
超级会员免费看
订阅专栏 解锁全文
34

被折叠的 条评论
为什么被折叠?



