#include "stdio.h"
typedef enum { idel, running, stopped } state_t;
typedef enum { start, stop, reset } event_t;
state_t current_state = idel;
void start_running(event_t event)
{
(void)event;
printf("Start running\n");
}
void stop_running(event_t event)
{
(void)event;
printf("Stop running\n");
}
void reset_stopped(event_t event)
{
(void)event;
printf("Reset stopped\n");
}
typedef struct {
state_t state;
event_t event;
state_t next_state;
void (*func)(event_t event);
} state_machine_t;
state_machine_t state_machine[] = {
{idel, start, running, start_running},
{running, stop, stopped, stop_running},
{stopped, reset, idel, reset_stopped}
};
void process_event(event_t event)
{
for (long long unsigned int i = 0; i < sizeof(state_machine) / sizeof(state_machine_t); i++) {
if (state_machine[i].state == current_state && state_machine[i].event == event) {
current_state = state_machine[i].next_state;
if (state_machine[i].func) {
state_machine[i].func(event);
return;
}
}
}
printf("Invalid event\n");
}
int main(void)
{
process_event(start);
getchar();
process_event(stop);
getchar();
process_event(reset);
getchar();
return 0;
}
表驱动状态机,要点:
1,回调函数!
2,查表!
-----看过网上其它文章生成的状态机。