c语言 fsm有限状态机
时间: 2023-09-15 22:23:11 浏览: 44
有限状态机(Finite State Machine,FSM)是一种描述有限个状态以及在这些状态之间转移和动作等行为的数学模型。在C语言中,可以使用结构体和函数指针实现一个简单的有限状态机,实现状态的转移和响应动作。
以下是一个简单的有限状态机的代码示例:
```c
typedef enum {
STATE_A,
STATE_B,
STATE_C,
STATE_D
} state_t;
typedef void (*action_t)(void);
typedef struct {
state_t current_state;
action_t action;
state_t next_state;
} transition_t;
void action_a(void) {
printf("Performing action A.\n");
}
void action_b(void) {
printf("Performing action B.\n");
}
void action_c(void) {
printf("Performing action C.\n");
}
void action_d(void) {
printf("Performing action D.\n");
}
transition_t transitions[] = {
{STATE_A, action_a, STATE_B},
{STATE_B, action_b, STATE_C},
{STATE_C, action_c, STATE_D},
{STATE_D, action_d, STATE_A}
};
int main(void) {
state_t current_state = STATE_A;
while (1) {
action_t action = NULL;
state_t next_state = STATE_A;
for (int i = 0; i < sizeof(transitions)/sizeof(transitions[0]); i++) {
if (transitions[i].current_state == current_state) {
action = transitions[i].action;
next_state = transitions[i].next_state;
break;
}
}
if (action != NULL) {
action();
}
current_state = next_state;
}
return 0;
}
```
以上代码定义了一个包含四个状态和四个动作的有限状态机。在 `main` 函数中,通过循环不断地执行当前状态对应的动作,并根据状态转移表更新当前状态。在此过程中,可通过添加新的状态和动作,扩展有限状态机的功能。