我正在使用有限状态机对我正在开发的嵌入式系统的行为进行建模。经过一些初步的测试后,我有一个用C编写的有限状态机工作得很好。我用来编写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实现这种并发性和层次化?
发布于 2017-07-06 18:38:08
外部状态机在一个连续的循环中运行,而子状态和子状态机必须运行到完成。在没有抢占式调度器的情况下,并发必须协同实现--“并发”状态必须按顺序执行,但每个状态都应该在每次调用上执行一个确定性的保证完成的操作--即没有无限期的忙碌等待、延迟或处理时间超过您的实时约束所允许的时间(这在任何情况下都是状态机约束的基础)。
子状态机可以与主状态机实现相同的方式,但不需要“大循环”。例如:
// Main state machine
static int current_state0 = 0 ;
int main( void )
{
static const void(*state_table[])(void) =
{
conection,
Idle,
cal,
bi,
pot,
gal,
eis,
PrepE,
Pret,
Meas,
FS_ch,
Ending,
Error
} ;
// Main loop - execute the current state
for(;;)
{
state_table[current_state0]() ;
}
}
void superState7()
{
// Execute concurrent sub-statemachines
subStateMachine71() ;
subStateMachine72() ;
}
// Sub-state machine
static int current_state71 = 0 ;
void subStateMachine71()
{
static const void(*state_table[])(void) =
{
state711,
state712,
state713,
state714
} ;
// Execute current substate
state_table[current_state71]() ;
}
...https://stackoverflow.com/questions/44942471
复制相似问题