【发布时间】:2021-12-27 23:16:01
【问题描述】:
很明显,机器的状态会被抽象成任务,但是如何控制转换呢?
我正在寻找的功能是一次只有一个状态任务处于活动状态,而其余状态任务则处于阻塞状态。正在运行的任务必须自己阻塞,并在状态转换模型中解除阻塞下一个任务。
我想到的方法是为每个任务创建一个二进制信号量的索引数组,然后简单地给要转换到的任务的信号量。
或者,我可以在一个任务中处理所有状态机功能,并控制哪些功能由 switch 语句执行?
哪种做法更有效或更好?
【问题讨论】:
-
单独任务中的状态机有点意思。
-
我同意@0__________ .. 这没有多大意义。但是,如果您仍然想这样做,请检查 xTaskNotify() 函数,以将事件发送到任务。
-
“很明显,机器的状态将被抽象为任务”——这一点都不清楚,任务不是状态。通常你会在一个任务中实现一个状态机within,并使用任务同时运行多个这样的状态机。这允许您运行更简单、更有凝聚力的状态机,而不是使用状态机作为调度手段。它也是在状态机中实现并发的一种方式。将任务用作离散的非并发状态没有任何意义。可以使用诸如事件标志之类的 RTOS IPC 机制在此类状态机之间交换事件