状态机的原理就不说了,先给出状态机的转换图,很简单
实现的思路是这样的:
1、用函数指针表示状态(状态函数)。
2、状态函数接受一个参数(event),并根据event决定下一个状态。
3、状态函数返回一个函数指针,此函数指针的类型也是状态函数指针。即状态函数返回一个指向下一个状态函数的指针。
4、由于返回值是和原函数相同类型的函数指针,要定义成这样
typedef func_ptr_t (*func_ptr_t)(int);
typedef void (*func_ptr_ret_t)(int);
typedef func_ptr_ret_t (*func_ptr_t)(int);
func_ptr_t func;
func_ptr_t func2;
func = (func_ptr_t)func2(参数);
// 定义函数指针类型
typedef void (*state_ret)(int event);
typedef state_ret (*state)(int event);
// 申明状态函数
state_ret STATE1(int event);
state_ret STATE2(int event);
state_ret STATE3(int event);
// 事件列表
enum EVENT_NUM{
};
int main(void)
{
}
// 状态1函数的实现
state_ret STATE1(int event)
{
}
// 状态2函数实现
state_ret STATE2(int event)
{
}
// 状态3函数实现
state_ret STATE3(int event)
{
}