不用怀疑,单片机的万能语言就是状态机。还希望大家不要条件反射式的看到状态机就
以为我要讲什么VHDL的东西——状态机是一种思维模式,是计算机理论的立足之本(不
相信请参考清华大学出版社的《自动机理论与应用》)——因此状态机的实现与语言本
身关系并不是绝对的。本文要讨论的状态机,从实现方式上更类似于Java中常用的那种
思维模式,而与VHDL相去甚远。
路要一步一步走,饭要一口一口吃,为了不把后来人吓跑,状态机理论中更多复杂的部
分,我会在以后专门写文章讨论,这里我先找一个切入点,从我常用的2种状态机编写
方式为大家慢慢展开。
首先,关于几个问题,比如:什么地方用状态机?状态机究竟有几种写法?状态机效率
到底高不高?是不是把简单问题弄复杂了?这类问题统统不在本文讨论之列,简而言之
——谁用谁知道。其实,还不能简单的就这么下了结论,套八股文而不求甚解的也大有
人在————因此我要说:关于状态机的各种问题“谁思考谁实践谁坚持谁知道”。
状态机入门第一式:switch case一线到底
要点: 用switch结构配合一个状态变量,通过修改状态变量的值来切换状态。
范例:
//! 定义状态名称与状态值之间的关系,增加可读性
#define FSM_START 0x00
#define FSM_STATE_A 0x01
#define FSM_STATE_B 0x02
…
#define FSM_RESET 0xFF
bool fsm_example_A( <</span>形参列表> ) {
static uint8_t s_chFSMState = FSM_START; //!< 定义状态变量
…
switch ( s_chFSMState ) {
case FSM_START:
//! 这里添加状态机初始化代码
…
s_chFSMState = FSM_STATE_A; //!< 进入下一状态
break;
case FSM_STATE_A:
//! 这里添加状态机A进入下一状态的检测代码
if (<</span>某某条件>) {
//! 这里做一些进入下一状态时要做的准备工作
s_c
傻孩子讲解状态机 来自淘豆网m.daumloan.com转载请标明出处.