搜索
bottom↓
楼主: Gorgon_Meducer

[FSM]状态机实践入门——程咬金只要三斧头厉害

  [复制链接]

出0入0汤圆

发表于 2015-1-31 18:25:16 | 显示全部楼层
谢谢 分享。。

出0入0汤圆

发表于 2015-1-31 23:10:46 | 显示全部楼层
相当详细。受益了。谢!

出0入0汤圆

发表于 2015-2-1 11:00:36 | 显示全部楼层
mark一下,学习了

出0入0汤圆

发表于 2015-2-1 17:50:49 | 显示全部楼层
顶一顶老帖,实践中总结,总结后实践

出0入0汤圆

发表于 2015-3-1 11:34:22 | 显示全部楼层
很厉害的样!

出0入0汤圆

发表于 2015-3-1 17:26:01 | 显示全部楼层
好东西学习了

出0入0汤圆

发表于 2015-3-2 10:35:05 | 显示全部楼层
不错,值得学习

出0入0汤圆

发表于 2015-3-2 13:00:59 | 显示全部楼层
学习一下,以后参考

出0入0汤圆

发表于 2015-3-11 15:59:33 | 显示全部楼层
我还以为是matlab呢,C语言也有这个概念啊真是见识了!

出0入0汤圆

发表于 2015-3-20 10:20:32 | 显示全部楼层
学习状态机,不错

出0入0汤圆

发表于 2015-5-4 15:14:17 | 显示全部楼层
3466756555 发表于 2011-3-2 14:13
状态机对于单个 顺序流程的任务来讲 非常适合

之前在项目上应用过状态机的构架, 驱动型任务 都写成单独 ...

我对于你的问题 有个很浅薄的想法 即使用状态机的面向对象处理 使用对象来管理状态机 这个具体我也说不清楚 还在摸索中 已有的处理是写HMI的使用 建立一个MNI的类 使用状态机控制界面转换  

出0入0汤圆

发表于 2015-5-5 08:26:00 | 显示全部楼层
mark,学习

出0入0汤圆

发表于 2015-5-5 22:03:04 | 显示全部楼层
好好学习,天天向上!谢谢分享!

出0入0汤圆

发表于 2015-5-12 09:19:03 | 显示全部楼层
mark,楼主好资料,感谢楼主

出0入0汤圆

发表于 2015-5-14 22:54:47 | 显示全部楼层
潜心学习中,受益匪浅。

出0入0汤圆

发表于 2015-5-18 20:14:36 | 显示全部楼层
学精通很难啊

出0入0汤圆

发表于 2015-5-21 12:49:30 | 显示全部楼层
好贴!

出0入0汤圆

发表于 2015-12-3 15:20:24 | 显示全部楼层
为什么要用这么多宏定义呢  不好看啊

出0入0汤圆

发表于 2015-12-3 16:18:14 | 显示全部楼层
营养丰富,受教受教

出0入0汤圆

发表于 2015-12-9 10:08:13 | 显示全部楼层
感谢楼主分享!果断收藏了。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2015-12-9 10:58:13 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2015-12-9 11:07:28 | 显示全部楼层
谢谢傻孩子老师的分享,学习一下...

出0入0汤圆

发表于 2015-12-23 22:33:56 | 显示全部楼层
状态机启蒙贴,好,多谢!

出0入0汤圆

发表于 2016-3-18 15:15:44 | 显示全部楼层
很好的资料-之前写过类似-if结构的段子-今天才知道是状态机的思想-用了都不知道-很受启发

出0入0汤圆

发表于 2016-3-18 15:26:35 | 显示全部楼层
823032003 发表于 2011-3-2 18:41
LZ 状态机 打算出书吗?  期待...

是的 市面上状态机的书 少之又少

出0入0汤圆

发表于 2016-4-15 15:36:43 | 显示全部楼层
状态在心中,无态也变态 !

出0入0汤圆

发表于 2016-4-15 18:43:14 | 显示全部楼层
很不错的资料

出0入0汤圆

发表于 2016-4-17 00:26:25 | 显示全部楼层
Gorgon_Meducer 发表于 2011-8-1 10:12
to 【221楼】 ARM3721
    2006年的时候写过一个你说得这种结构,并制作了一个“基于消息触发的合作式调度 ...

目前还没有魄力去自己搞一个调度器,万一出问题,就搞死人了。
现在更倾向于使用状态机和消息机制写一些模块,先在小模块里面应用起来。
吸取一下经验先,等一会觉得成熟了,有魄力了,再去搞更大更深的东东。
我觉得更应该学习QP的状态机思想。

出0入0汤圆

发表于 2016-4-17 22:21:08 | 显示全部楼层
得要认真学习,

出0入0汤圆

发表于 2016-4-27 10:32:29 | 显示全部楼层
最近用状态机第一式写了按键扫描程序和蜂鸣器单响和多响混合逻辑程序,有了一些体会。
有两个明显的好处是:
1)提高CPU处理效率
2)程序更加易读,逻辑表诉清晰
现在我准备写一个AD采集程序。采集到的电压值可以分5个范围,每种返回对应不同的触发
条件。由于各种逻辑的交叉,感觉使用状态机大法第一式有点行不通,所以今天再来看看是
否可以使用状态机大法第二式。这种方法更加灵活。等我实现了,我再来发表一下这种方式
的好处。

出0入0汤圆

发表于 2016-4-27 11:44:36 | 显示全部楼层
Gorgon_Meducer 发表于 2011-8-25 14:34
to 【236楼】 defineme
    这种说法本身很有雄辩地感觉。其实我之前给出过答案:同样的代码,看得人不同 ...

体会到了,只要在程序中使用到标志位,就可以说是一个状态了。只不过以前没有所谓状态机的概念,其实大家不知不觉都在使用。
我在想为什么我现在要改成状态机方式。我觉得唯一的理由就是,这样写了之后,程序看起来清晰多了。这个“清晰多了”作用很大。
意味着以后维护起来更方便。

出0入0汤圆

发表于 2016-4-27 15:55:57 | 显示全部楼层
3466756555 发表于 2011-3-2 14:13
状态机对于单个 顺序流程的任务来讲 非常适合

之前在项目上应用过状态机的构架, 驱动型任务 都写成单独 ...

我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控制ADC的任务。他们之间没有任何联系。
想知道你所说的:

但随着状态机的增多 和系统结构分层   出现的问题:
       1、各个状态机 之间究竟如何管理?(之前用的是上层状态机管理下层多个状态机的)
       2、各状态机 之间同步 如何做到更可靠  
          一不小心就会出现 锁死 状态
       3、产品代码 以后维护比较困难

是什么个情况?能否举个例子?

出0入296汤圆

 楼主| 发表于 2016-4-28 20:45:48 | 显示全部楼层
Yvan 发表于 2016-4-27 15:55
我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控 ...

非常感谢你把你的实践过程分享在这里,我现在已经基本只用switch方法了。

出0入296汤圆

 楼主| 发表于 2016-4-28 20:47:14 | 显示全部楼层
Yvan 发表于 2016-4-27 15:55
我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控 ...

你问的这几个问题,其实是一个多任务程序设计的问题。
借助状态机,你可以在裸机上实现多任务并发执行。那么这个时候你遇到的问题其实和用RTOS进行
开发时候所遇到的多任务之间如何协调通信的问题是一致的。也就是说,操作系统的结论和知识是
可以借鉴的——其实不是借鉴,根本就是同一个问题。

出0入0汤圆

发表于 2016-4-28 23:57:23 | 显示全部楼层
Gorgon_Meducer 发表于 2016-4-28 20:45
非常感谢你把你的实践过程分享在这里,我现在已经基本只用switch方法了。
...

哈~感谢傻孩子的回复。
我已经用状态机方法第二式写了AD采集程序。整个过程分为以下几种状态:
1)每5ms扫描AD通道,得到电压值
2)判断上一步得到的电压值是处于哪一个电压范围,从而得出A、B、C、D、E这5个消息中的一个(这一步每25ms执行一次)
3)用第2步得到的消息与历史消息作比较,若不相等则回到第1步继续扫描,若相等则进入第4步
4)这一步是延时等待(每5ms计数一次),时间到了之后再判断现有消息和历史消息是否相等。不相等则回到第一步,相等则进入下一步。
5)根据得到的消息产生相应的触发。

可以看到,上面的第1和第4个状态都需要5ms执行一次,而第2的状态则是大约25ms执行一次。因此,如果使用switch状态机行不通。所以
我改用第二式。但是,用完第二式后我发现:其实这个跟我以前没了解状态机概念时的写法是一样的,就是用很多的if else。只不过现在是
特意起了各种状态名称,把他们一个个区分开而已。这就是我现在的感受。

出0入4汤圆

发表于 2016-4-29 15:10:55 | 显示全部楼层
裸奔了好多年.现在才开始研究多任务调度,uC/OS系统.对这里讨论的状态机编程思想也非常感兴趣.

出0入0汤圆

发表于 2016-5-8 20:13:29 来自手机 | 显示全部楼层
又看了一遍 醍醐灌顶

出0入296汤圆

 楼主| 发表于 2016-5-20 10:05:58 | 显示全部楼层
Yvan 发表于 2016-4-28 23:57
哈~感谢傻孩子的回复。
我已经用状态机方法第二式写了AD采集程序。整个过程分为以下几种状态:
1)每5ms ...

你非要把原本是两个任务的事情写到同一个状态机里面,当然做不到了。
从逻辑上来说,你说的这个情况应该是两个任务协同工作来获得的。

出0入0汤圆

发表于 2016-5-21 17:38:15 | 显示全部楼层
Gorgon_Meducer 发表于 2016-5-20 10:05
你非要把原本是两个任务的事情写到同一个状态机里面,当然做不到了。
从逻辑上来说,你说的这个情况应该 ...

说得对。这样看的话,我觉得我缺乏线程和任务划分的能力(就是细分任务)。有时候我会把一个大任务
当作最小任务来看。我觉得我应该马上使用RTOS来实践一下多任务设计。锻炼如何划分线程(一直以来
都是裸奔)。

出0入0汤圆

发表于 2016-5-21 17:41:43 | 显示全部楼层
BS_good200xy 发表于 2016-4-29 15:10
裸奔了好多年.现在才开始研究多任务调度,uC/OS系统.对这里讨论的状态机编程思想也非常感兴趣. ...

我也打算开始应用一下RTOS。

出0入0汤圆

发表于 2016-9-3 15:44:13 | 显示全部楼层
翻出来学习,特此留念,感谢大神分享!

出0入0汤圆

发表于 2016-9-5 10:31:17 | 显示全部楼层
谢谢大师,感谢楼上的经验分享,加深了理解

出0入0汤圆

发表于 2016-10-9 10:01:20 | 显示全部楼层
初入状态机,看的就是这篇帖子,受益匪浅!

出0入0汤圆

发表于 2016-12-13 20:58:13 | 显示全部楼层
讲的不错,mark

出0入0汤圆

发表于 2017-6-23 21:38:56 | 显示全部楼层
非常好,强大!

出0入0汤圆

发表于 2018-2-1 22:50:03 | 显示全部楼层
原来一直用SWITCH写状态机。最近写了一段代码,终于体会到了楼主的状态机第三式:状态在心中,无态也变(有)态。
很好很强大。

出0入0汤圆

发表于 2018-4-28 11:20:19 | 显示全部楼层
学习了。。。

出0入0汤圆

发表于 2018-4-28 11:20:19 | 显示全部楼层
学习了。。。

出0入0汤圆

发表于 2018-5-11 15:24:44 | 显示全部楼层
收藏学习了                                                            

出0入0汤圆

发表于 2018-8-9 23:11:18 | 显示全部楼层
mark 状态机!

出200入0汤圆

发表于 2018-11-28 21:13:26 来自手机 | 显示全部楼层
mark……

出0入0汤圆

发表于 2019-1-6 21:31:02 | 显示全部楼层
学习了,谢谢!~·

出0入0汤圆

发表于 2019-2-28 14:15:54 | 显示全部楼层
tian_zi 发表于 2014-3-30 03:47
用操作系统要比状态机不更好么,不过状态机对于跑裸机的思路还是不错的

抢占式调度器对编程的要求高一点,容易出BUG

出0入0汤圆

发表于 2019-4-4 16:17:40 | 显示全部楼层
正在学习状态机

出0入0汤圆

发表于 2019-9-3 19:57:03 | 显示全部楼层
mark一下

出0入296汤圆

 楼主| 发表于 2019-9-5 22:22:15 | 显示全部楼层

推荐你看这个贴子:
https://www.amobbs.com/forum.php?mod=viewthread&tid=5668532
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 06:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表