有限状态机C语言实现
来源:互联网 发布:数据脱敏规则 编辑:程序博客网 时间:2024/05/30 04:29
有限状态机(FSM)是设计和实现事件驱动程序内复杂行为组织原则的有力工具。
设计思路:
(1)用函数指针表示状态;
(2)函数指针函数接收事件(EVENT),根据(EVENT)决定下个状态;
(3)函数指针函数返回下个状态的函数指针。
利用强制类型转换,实现函数指针函数的原型。
#include <stdio.h>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 { EVENT1, EVENT2, EVENT3, EVENT4,};int main(void) {int i;int event;state curState = STATE1; for (i = 0; i < 5; i++) {switch(i % 5) {case 0: event = EVENT1; break;case 1: event = EVENT2; break;case 2: event = EVENT3; break;case 3: event = EVENT4; break;case 4: event = EVENT2; break;default: break;}// 运行当前状态函数,返回下一状态函数指针curState = (state)curState(event);}return 0;}// 状态1函数实现state_ret STATE1(int event) {printf("Current state is STATE1, event = %d\n", event + 1);// 设置当前状态state_ret curState = (state_ret)STATE1;switch(event) {case EVENT1: curState = (state_ret)STATE2; break;case EVENT3: curState = (state_ret)STATE3; break;default: break;}return curState;}// 状态2函数实现state_ret STATE2(int event) {printf("Current state is STATE2, event = %d\n", event + 1); state_ret curState = (state_ret)STATE2; switch(event){case EVENT2: curState = (state_ret)STATE1; break;default: break;}return curState;}// 状态3函数实现state_ret STATE3(int event) {printf("Current state is STATE3, event = %d\n", event + 1);state_ret curState = (state_ret)STATE3;switch(event) {case EVENT4: curState = (state_ret)STATE2; break;default: break;}return curState;}输出:
wang@wang:~/c$ ./a.out
Current state is STATE1, event = 1
Current state is STATE2, event = 2
Current state is STATE1, event = 3
Current state is STATE3, event = 4
Current state is STATE2, event = 2
0 0
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- c语言实现有限状态机
- C语言实现有限状态机
- C语言实现有限状态机
- 有限状态机C语言实现
- 用C语言实现有限状态机
- 用C语言实现有限状态机
- C语言有限状态机的实现
- C语言实现有限状态机FSM
- 一种有限状态机的C语言实现
- 整理:一种有限状态机的C语言实现
- C语言 有限状态机
- 用C语言实现有限状态机--读《C专家编程》
- 删除C/C++中的注释-有限状态机(C语言实现)
- c/c++ 有限状态机实现
- 中断处理流程
- 小鱼大鱼整理文档
- [LeetCode]--24. Swap Nodes in Pairs
- 5、表达式的比较
- HTML中的几种定位方式
- 有限状态机C语言实现
- 总结常用的SEO 办法
- mac下spark环境搭建
- @Razor 引擎 & Jquery in Asp.net MVC
- 6、循环结构语句
- DDR3布局的那些事儿
- 如何获取 iOS 设备的唯一 ID
- 在VS2008,VS2010,VC6.0MFC中嵌入MATLAB的command window,调用MATLAB引擎
- 7、条件结构语句