状态机理解以及总结

状态机可常用于一些互斥功能中,总结一下要点

状态机有三个要素点;状态,事件,动作。可以根据此三要素定义结构体,

typedef union Status
{
u8 data[6]; //联合体便于一次清零操作
struct
{
u8 NowSta; //当前处于何种状态之下
u8 Event; //什么样的事件触发
void *pFun; //触发事件发生后执行什么动作
};
}ST;

状态机就是在当前状态下,判断事件是否发生,不发生则维持当前状态,发生则执行对应的动作,然后将状态转换,这样所执行的动作有且只有一次,不会反复。一般的函数大致是这样的

switch(ST.NowSta)
{
case 1:
{
if(Event) //事件发生了
{
pFun; //执行对应的动作
}
}break;
case 2:
{
同1;
}break;
default:
{
ST.NowSta = 1; //给一个默认的状态,防止状态机跳出界外
}
}

这种状态机就是在状态下判断事件是否发生,然后执行对应的动作,也可以在事件发生时判断当前的状态然后执行对应的动作,我觉得这种思维易于理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值