sunday640
发表于 2015-1-31 18:25:16
谢谢 分享。。
xxzzhy
发表于 2015-1-31 23:10:46
相当详细。受益了。谢!
Vampireyifeng
发表于 2015-2-1 11:00:36
mark一下,学习了
didadida
发表于 2015-2-1 17:50:49
顶一顶老帖,实践中总结,总结后实践
huqinglun
发表于 2015-3-1 11:34:22
很厉害的样!
xiaomao1490
发表于 2015-3-1 17:26:01
好东西学习了
yangweibo_hubei
发表于 2015-3-2 10:35:05
不错,值得学习
lzs21802180
发表于 2015-3-2 13:00:59
学习一下,以后参考
signal_12345
发表于 2015-3-11 15:59:33
我还以为是matlab呢,C语言也有这个概念啊真是见识了!
杨遥
发表于 2015-3-20 10:20:32
学习状态机,不错
笑对人生
发表于 2015-5-4 15:14:17
3466756555 发表于 2011-3-2 14:13
状态机对于单个 顺序流程的任务来讲 非常适合
之前在项目上应用过状态机的构架, 驱动型任务 都写成单独 ...
我对于你的问题 有个很浅薄的想法 即使用状态机的面向对象处理 使用对象来管理状态机 这个具体我也说不清楚 还在摸索中 已有的处理是写HMI的使用 建立一个MNI的类 使用状态机控制界面转换
tjcf
发表于 2015-5-5 08:26:00
mark,学习
miight
发表于 2015-5-5 22:03:04
好好学习,天天向上!谢谢分享!
hotsauce1861
发表于 2015-5-12 09:19:03
mark,楼主好资料,感谢楼主
hnxoj26
发表于 2015-5-14 22:54:47
潜心学习中,受益匪浅。
行成于思
发表于 2015-5-18 20:14:36
要{:dizzy:}学精通很难啊
eddia2012
发表于 2015-5-21 12:49:30
{:smile:}好贴!
diputs
发表于 2015-12-3 15:20:24
为什么要用这么多宏定义呢不好看啊
deyu35
发表于 2015-12-3 16:18:14
营养丰富,受教受教
yinglively2000
发表于 2015-12-9 10:08:13
感谢楼主分享!果断收藏了。。。。。。。。。。。。。。。。
308594151
发表于 2015-12-9 10:58:13
mark一下
crazydtone
发表于 2015-12-9 11:07:28
谢谢傻孩子老师的分享,学习一下...
bigwei
发表于 2015-12-23 22:33:56
状态机启蒙贴,好,多谢!
shange144k8
发表于 2016-3-18 15:15:44
很好的资料-之前写过类似-if结构的段子-今天才知道是状态机的思想-用了都不知道-很受启发
shange144k8
发表于 2016-3-18 15:26:35
823032003 发表于 2011-3-2 18:41
LZ 状态机 打算出书吗?期待...
是的 市面上状态机的书 少之又少
mg坏坏
发表于 2016-4-15 15:36:43
状态在心中,无态也变态 !
自由飞儿
发表于 2016-4-15 18:43:14
很不错的资料
Yvan
发表于 2016-4-17 00:26:25
Gorgon_Meducer 发表于 2011-8-1 10:12
to 【221楼】 ARM3721
2006年的时候写过一个你说得这种结构,并制作了一个“基于消息触发的合作式调度 ...
目前还没有魄力去自己搞一个调度器,万一出问题,就搞死人了。
现在更倾向于使用状态机和消息机制写一些模块,先在小模块里面应用起来。
吸取一下经验先,等一会觉得成熟了,有魄力了,再去搞更大更深的东东。
我觉得更应该学习QP的状态机思想。
wgm_123
发表于 2016-4-17 22:21:08
得要认真学习,
Yvan
发表于 2016-4-27 10:32:29
最近用状态机第一式写了按键扫描程序和蜂鸣器单响和多响混合逻辑程序,有了一些体会。
有两个明显的好处是:
1)提高CPU处理效率
2)程序更加易读,逻辑表诉清晰
现在我准备写一个AD采集程序。采集到的电压值可以分5个范围,每种返回对应不同的触发
条件。由于各种逻辑的交叉,感觉使用状态机大法第一式有点行不通,所以今天再来看看是
否可以使用状态机大法第二式。这种方法更加灵活。等我实现了,我再来发表一下这种方式
的好处。
Yvan
发表于 2016-4-27 11:44:36
Gorgon_Meducer 发表于 2011-8-25 14:34
to 【236楼】 defineme
这种说法本身很有雄辩地感觉。其实我之前给出过答案:同样的代码,看得人不同 ...
体会到了,只要在程序中使用到标志位,就可以说是一个状态了。只不过以前没有所谓状态机的概念,其实大家不知不觉都在使用。
我在想为什么我现在要改成状态机方式。我觉得唯一的理由就是,这样写了之后,程序看起来清晰多了。这个“清晰多了”作用很大。
意味着以后维护起来更方便。
Yvan
发表于 2016-4-27 15:55:57
3466756555 发表于 2011-3-2 14:13
状态机对于单个 顺序流程的任务来讲 非常适合
之前在项目上应用过状态机的构架, 驱动型任务 都写成单独 ...
我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控制ADC的任务。他们之间没有任何联系。
想知道你所说的:
但随着状态机的增多 和系统结构分层 出现的问题:
1、各个状态机 之间究竟如何管理?(之前用的是上层状态机管理下层多个状态机的)
2、各状态机 之间同步 如何做到更可靠
一不小心就会出现 锁死 状态
3、产品代码 以后维护比较困难
是什么个情况?能否举个例子?
Gorgon_Meducer
发表于 2016-4-28 20:45:48
Yvan 发表于 2016-4-27 15:55
我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控 ...
非常感谢你把你的实践过程分享在这里,我现在已经基本只用switch方法了。
Gorgon_Meducer
发表于 2016-4-28 20:47:14
Yvan 发表于 2016-4-27 15:55
我现在就在用状态机方法来写驱动型任务,感觉他们都很独立。比如控制蜂鸣器的任务;控制按键的任务。
控 ...
你问的这几个问题,其实是一个多任务程序设计的问题。
借助状态机,你可以在裸机上实现多任务并发执行。那么这个时候你遇到的问题其实和用RTOS进行
开发时候所遇到的多任务之间如何协调通信的问题是一致的。也就是说,操作系统的结论和知识是
可以借鉴的——其实不是借鉴,根本就是同一个问题。
Yvan
发表于 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。只不过现在是
特意起了各种状态名称,把他们一个个区分开而已。这就是我现在的感受。
BS_good200xy
发表于 2016-4-29 15:10:55
裸奔了好多年.现在才开始研究多任务调度,uC/OS系统.对这里讨论的状态机编程思想也非常感兴趣.
bigwei
发表于 2016-5-8 20:13:29
又看了一遍 醍醐灌顶
Gorgon_Meducer
发表于 2016-5-20 10:05:58
Yvan 发表于 2016-4-28 23:57
哈~感谢傻孩子的回复。
我已经用状态机方法第二式写了AD采集程序。整个过程分为以下几种状态:
1)每5ms ...
你非要把原本是两个任务的事情写到同一个状态机里面,当然做不到了。
从逻辑上来说,你说的这个情况应该是两个任务协同工作来获得的。
Yvan
发表于 2016-5-21 17:38:15
Gorgon_Meducer 发表于 2016-5-20 10:05
你非要把原本是两个任务的事情写到同一个状态机里面,当然做不到了。
从逻辑上来说,你说的这个情况应该 ...
说得对。这样看的话,我觉得我缺乏线程和任务划分的能力(就是细分任务)。有时候我会把一个大任务
当作最小任务来看。我觉得我应该马上使用RTOS来实践一下多任务设计。锻炼如何划分线程(一直以来
都是裸奔)。
Yvan
发表于 2016-5-21 17:41:43
BS_good200xy 发表于 2016-4-29 15:10
裸奔了好多年.现在才开始研究多任务调度,uC/OS系统.对这里讨论的状态机编程思想也非常感兴趣. ...
我也打算开始应用一下RTOS。
Joetu
发表于 2016-9-3 15:44:13
翻出来学习,特此留念,感谢大神分享!
lyl2022
发表于 2016-9-5 10:31:17
谢谢大师,感谢楼上的经验分享,加深了理解
JungleKid
发表于 2016-10-9 10:01:20
初入状态机,看的就是这篇帖子,受益匪浅!
靳涛5128121
发表于 2016-12-13 20:58:13
讲的不错,mark
prolove
发表于 2017-6-23 21:38:56
非常好,强大!
su33691
发表于 2018-2-1 22:50:03
原来一直用SWITCH写状态机。最近写了一段代码,终于体会到了楼主的状态机第三式:状态在心中,无态也变(有)态。
很好很强大。{:victory:}
roc2
发表于 2018-4-28 11:20:19
学习了。。。
roc2
发表于 2018-4-28 11:20:19
学习了。。。
roc2
发表于 2018-5-11 15:24:44
收藏学习了
myh_hh
发表于 2018-8-9 23:11:18
mark 状态机!
wahaha
发表于 2018-11-28 21:13:26
mark……
changshs
发表于 2019-1-6 21:31:02
学习了,谢谢!~·
玉石俱焚
发表于 2019-2-28 14:15:54
tian_zi 发表于 2014-3-30 03:47
用操作系统要比状态机不更好么,不过状态机对于跑裸机的思路还是不错的
抢占式调度器对编程的要求高一点,容易出BUG
bingshuihuo888
发表于 2019-4-4 16:17:40
正在学习状态机
裸奔的蜗牛菌
发表于 2019-9-3 19:57:03
mark一下
Gorgon_Meducer
发表于 2019-9-5 22:22:15
裸奔的蜗牛菌 发表于 2019-9-3 19:57
mark一下
推荐你看这个贴子:
https://www.amobbs.com/forum.php?mod=viewthread&tid=5668532