【发布时间】:2017-12-10 01:56:50
【问题描述】:
我正在使用 FSM 对我正在开发的嵌入式系统的行为进行建模。经过一些初步测试后,我有一个用 C 编码的 FSM 运行良好。我用来编写 FSM 的方法是指针函数表,我在其中定义了一个表,其中包含在每个状态中发生的所有函数。
void(*state_table[])(void) = {
conection,
Idle,
cal,
bi,
pot,
gal,
eis,
PrepE,
Pret,
Meas,
FS_ch,
Ending,
Error };
现在下一步是对一些使用第一种方法无法解决的复杂需求进行建模。在这个新模型中,我想使用一些并发性来对两个应该“同时”工作的 FSM 进行建模,并且我还使用了一些层次结构来将这些 FSM 置于一个超状态中。
我现在遇到的问题是,我不确定如何使用 C 编写这种并发和层次结构。我正在查看 QP 框架,但我认为我的 FSM 还没有那么复杂,无法开始使用这些框架。
这是我设计的 FSM。 状态 71 和 72 是超状态 7 中的并发状态。它们之间的执行是完全独立的,它们不共享任何变量。
如何使用 C 实现这种并发性和层次结构?
【问题讨论】:
-
你可以观看传播器的概念来实现并发。 groups.csail.mit.edu/mac/users/gjs/propagators
-
你在使用 RTOS 吗?
-
为什么不将它们也编码为函数指针数组?
-
是的,还有两个相同结构的表。作为状态机,它们将同时运行。如果您从它们的超状态处理程序调用两个表的状态。状态机背后的想法是在单线程系统中模拟并发。
-
@GauravPathak 不,我希望尽可能简单。所以 RTOS 现在不是我的选择。