c-在FreeRTOS中实现类似状态机的转换的好方法是什么



很明显,机器的状态将被抽象为任务,但如何控制转换?

我正在寻找的功能是,一次只有一个状态任务处于活动状态,而其余任务则处于阻塞状态。正在运行的任务必须阻止自身,并取消阻止状态转换模型中下一个任务。

我想到的方法是为每个任务创建一个二进制信号量的索引数组,并简单地给要转换到的任务的信号量。

或者,我可以在一个任务中处理所有状态机功能,并规定哪些功能由switch语句执行?

哪个更有效,哪个更有效?

不确定SO是问这个问题的合适人选,因为这是一个真正的一般性问题。无论如何:imho最简单的入门方法是使用现有的工具,在这种情况下是状态机设计模式。C语言不是实现它的完美语言,但它是可以实现的,例如:https://stackoverflow.com/a/44955234/4885321或https://www.adamtornhill.com/Patterns%20in%20C%202,%20STATE.pdf在FreeRTOS的上下文中,FSM很可能最终成为一个单独的任务。

最新更新