state.h
#ifndef __STATE_H
#define __STATE_H
//定义状态机函数指针
typedef void (*state_func_p)(void);
#endif
state.c
#include "state.h"
//记录当前状态,实现状态循环
static state_func_p g_state_cur = NULL;
//func:即将跳转的状态
void main_setState(state_func_p func){
g_state_cur = func;
}
// 获取当前状态
state_func_p main_getState(void){
return g_state_funcCur;
}
封装成get、set函数供上层调用
main.c
#include "state.h"
//空闲状态
void main_stateIdle(void){
//功能实现
if(开始运行){
main_setState(main_stateRun);
}
if(发生错误){
main_setState(main_stateError);
}
}
//运行状态
void main_stateRun(void){
//功能实现
if(停止运行){
main_setState(main_stateIdle);
}
if(发生错误){
main_setState(main_stateError);
}
}
//错误状态
void main_stateError(void){
//功能实现
if(错误消除){
main_setState(main_stateIdle);
}
}
int main(void){
//设置初始为空闲状态
main_setState(main_stateIdle);
while(1){
(*(main_getState()))();
}
}