状态机分有限状态机和层次状态机,有限状态机是单层,层次状态机是多层。
实用性上考虑,FSM用switch-case即可,一般是先判断状态,再在每个状态的处理中判断消息。如果代码量太多,可以考虑先判断消息,再在消息处理中判断状态,将不同状态的相同处理合并。如果状态很多,分了层次,可以用HSM,父状态子状态。由于消息的处理是紧密关联子状态,所以优化代码量的思路是先判断父状态,处理父状态的代码里面先判断消息再判断子状态。
补充:
状态机妙用,手把手教你C语言手写工业级五态进程模型,只适用FSM,不能用于HSM,同时状态切换需要有明确的事件发生,很多情况用不了。
补充:
从零开始的状态机漫谈(1)——万物之始的语言
从零开始的状态机漫谈(2)——switch:你的状态机初恋
从零开始的状态机漫谈(3)——状态机设计原则:清晰!清晰!还是清晰!
状态机写得像屎山,ECU早晚要造反