状态机 我深深陷入 switch() { case X: .....} 不能自拔

[复制链接]
 楼主| happy_snail 发表于 2012-12-6 13:43 | 显示全部楼层 |阅读模式
最近用状态机 写程序 ,完工了 也跑起来了 没问题! 但是我感觉自己 全是  switch() { case X: .....}  这种结构 一层有一层 ,我不能 从这种结构中 逃出来 。 不知道哪位 大虾 给小弟 一点点 启示(或者推荐点资料) !小弟 万分感谢!!
ayb_ice 发表于 2012-12-6 14:42 | 显示全部楼层
只是不要嵌套太多就行了
yicaiwu 发表于 2012-12-6 16:40 | 显示全部楼层
我也一样
chenbb8 发表于 2012-12-6 20:47 | 显示全部楼层
使用QP_NANO可以省去状态的分支判断
具体参考 嵌入式系统的微模块化程序设计
你也可以直接上www.state-machine.com下载最新的QP_NANO,参考里面的定时炸*的例子。
需要注意的是,例子中使用了QP_NANO的QF/QK模块提供的抢占式和非抢占式的调度器,如果有自己熟悉的调度器的话,
可以只用QEP中的QFsm来设计程序(我就只参考了QFsm),有人在CSDN上发表了QEP的注释,虽然我没看,但你可以参考下
http://blog.csdn.net/lyqdy1/article/details/7085959
新版的Practical UML Statecharts in C/C++中文版,听说最近也会出版
到时候学习了HSM的实现技术,代码紧凑性应该还会进一步提高(我感觉现在代码的体积有点大)。
值得注意的是,在51上使用的时候,需要考虑函数的可重入性
chenbb8 发表于 2012-12-6 21:21 | 显示全部楼层
多一点考虑异步操作,同步操作当然会导致状态嵌套的问题
使用调度器的话,大部分状态机可以作为一个任务运行,在特定的时间下执行就行了。函数之间使用FIFO、栈、信号量来传递消息。
songhere 发表于 2012-12-6 23:54 | 显示全部楼层
有状态机的流程图,在写程序。。。
Tinnal 发表于 2012-12-7 09:04 | 显示全部楼层
对代码进行重构,不要什么代码都写在switch里面,要把功能代码进行封装,这样,在switch只会存在少量的几个函数的高层调用。

也可以重根本上从新调证状态机的状态数,这样,就可以从根本上解决每一状态的复杂程序度。
cheungman 发表于 2012-12-7 12:01 | 显示全部楼层
大状态机+小状态机, 进程+线程
HWM 发表于 2012-12-7 12:22 | 显示全部楼层
to LZ:

首先,对于一个状态机,switch case 分支语句不会有嵌套,仅可能有多个case(相应的状态比较多的话)。若觉得固定语句结构不灵活,可采用状态转移表(需要一个相应的数据结构)处理方式。
 楼主| happy_snail 发表于 2012-12-7 13:20 | 显示全部楼层
HWM 发表于 2012-12-7 12:22
to LZ:

首先,对于一个状态机,switch case 分支语句不会有嵌套,仅可能有多个case(相应的状态比较多的 ...

能给点 资料 吗?我研究一下!这方面的书籍 或资料 不知道怎么找呀?
小嘿 发表于 2012-12-7 13:25 | 显示全部楼层
从逻辑上说,一个switch case 就可以描述整个系统的状态了,所以这是状态划分的问题
 楼主| happy_snail 发表于 2012-12-8 09:10 | 显示全部楼层
顶起来 大家多说说自己的 方法呀
yanyanyan168 发表于 2012-12-8 17:19 | 显示全部楼层
我也是啊,感觉好没有水平:L!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

80

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

80

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部