【launchpad心得】launchpad课后练习十八之状态机入门
[复制链接]
launchpad课后练习十八之状态机入门
1.状态机的概念(来源网络)
状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。
比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。
进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。
同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有限的状态构成。
显示扫描程序也是状态机;通信命令解析程序也是状态机;甚至连继电器的吸合/释放控制、发光管(LED)的亮/灭控制又何尝不是个状态机。
当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。
程序其实就是状态机。
也许你还不理解上面这句话。请想想看,计算机的大厦不就是建立在“0”和“1”两个基本状态的地基之上么? 状态机的要素 状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。
状态机的表示方法有许多种,我们可以用文字、图形或表格的形式来表示一个状态机。
2.应用——状态机入门
(本人也是菜鸟而已,菜鸟飞过,高手绕道~~~~,此例子并不是一个完善的状态机,只是为了新手,知道什么是状态机,怎么来完成最基本的状态机而已,高手拍砖轻一点啊)
本文也把按键看成4个状态,一个按键的判断就必须通过这4个状态来检测,在消抖完成后,会进入下一个确认状态,确认之后进入下一个释放状态。
#define key_a 1 // 初始
#define key_b 2 // 消抖
#define key_c 3 // 确认
#define key_d 4 // 释放
程序中没有加入长按、短按等等,在以后的章节中会加入,这里只做简单的按下,程序中注释较多,方便入门者阅读。
课后练习十八之状态机入门.pdf
(131.84 KB, 下载次数: 249)
|