C语言状态机编程思想
有限状态机概念
switch
、case
或者if
、else
)切换状态,通过改变状态机状态,让程序按设定的顺序执行。
应用举例

if (定时器 >= 10ms) //10ms是典型消抖时间{ switch (按键状态) { case 按键弹起状态: if (IO读取为低电平) 按键状态=前沿抖动; break; case 前沿抖动状态: if (IO读取为低电平) 按键状态=按键按下; break; case 按键按下状态: if (IO读取为高电平) 按键状态=后沿抖动; break; case 后沿抖动状态: if (IO读取为高电平) 按键状态=按键弹起; break;default:按键状态=按键弹起; }}
状态机编程建议
typedef enum { state_1=1, state_2, state_3}State;
typedef enum{ event_1=1, event_2, event_3, event_4, event_5}Event;
typedef struct { State curState; //当前状态 Event eventId; //事件 State nextState; //下一个状态 Action action; //动作功能}StateEvent;
State
和Event
,并赋予相应的动作功能,整体的基本流程如下:当前状态->有事件触发->跳到下一个状态->具体的动作功能
版权归原作者所有,如有侵权,请联系删除。
赞 (0)