我个人对状态机的理解是这样的:
事件(我饿了)触发状态(吃饭),在吃饭这个状态下,我会一直吃饭,当事件(吃饱了)发生以后,进入状态(洗碗),也就是说状态转换的条件唯一(事件——吃饱了),在(吃饭)状态下和(洗碗)状态下我虽然会使用同样的资源,但是这个资源在两种状态下功能是不同的。
节拍从某种意义上讲也是状态机,但是他条件有些苛刻,比如事件(我饿了)触发状态(吃饭),在吃饭这个状态下,10秒后进入状态(洗碗),无论我吃不吃的饱都转换了。也就是说,如果你的处理周期超过了这个计时周期,你在这个状态下的任务是没有完成的。
如果需要每个状态随时可以互相转换,可以使用状态机,用事件去触发它进入所需的状态;用节拍的话是顺序执行的,你得等待MCU计数到当前的状态才能使用该功能。比如,你在洗碗状态下,觉得没吃饱,那么你可以随时触发外部事件(我饿了)去吃饭,但是节拍你得等洗碗结束,洗碗结束后还有其他的状态依次执行完再回头。
以上是个人理解,如有不妥,请各位指正 |