19、基于QEP的计算器状态机实现与常见陷阱

基于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()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值