guyuqiang
发表于 2011-6-4 16:06:24
记好!
esdart
发表于 2011-6-4 17:02:04
学习啦。
davidd
发表于 2011-6-4 17:41:21
mark
rjinglan
发表于 2011-7-20 14:48:13
mark
WillFeng
发表于 2011-7-20 17:34:44
mark
dujun168
发表于 2011-7-22 18:42:00
mark
xizi
发表于 2011-7-22 23:24:55
回复【65楼】gshuang1
上学的时候一直以为是状态机一种很高级算法,后来无聊在网上浏览了下究竟是啥子东西,才发觉原来自己编出来的程序实质也是状态机的一种,从此不再觉得没什么稀奇了,只是这名字取得有点好。其实这所谓的“状态机”每个人都能自己摸索出来的,编个比较多任务的单片机程序,在不断的追求完美的过程中就会走“状态机”这种方式。楼主似乎比较喜欢把程序模块化,很重视基础性的东西,精益求精,不错。看得出楼主应该是个学校老师吧,呵呵
-----------------------------------------------------------------------
傻孩子真是老师吗?还以为是在校生呢。
ghostxdy
发表于 2011-7-23 01:55:14
MARK...回头细读
lwx6
发表于 2011-7-28 01:13:00
很好!!
kingboy100
发表于 2011-7-28 08:04:39
mark
cdzhong
发表于 2011-7-28 09:28:24
做个记号
khuohuo
发表于 2011-7-28 09:48:55
MARK。
qq8682
发表于 2011-7-28 10:00:40
程序匠人的书中讲到过状态机,还有使用了状态机的实例(摇摇棒)!
HYLG
发表于 2011-7-28 10:15:53
傻孩子好久没见了。
ARM3721
发表于 2011-7-30 11:19:27
搞单片机开发以来,一直用傻孩子提到的第一种状态机思想,做一般的项目应用不成问题,后来在一个比较大的项目中用到了一种基于消息触发的状态机,状态转换是有消息触发的,而消息来自于一个循环队列(傻孩子的那种),这样,只要将不同状态下,不同消息对应的动作函数关联就可以了,状态机会自动根据消息去执行相应的动作函数。不知道傻孩子有没有搞过这样的状态机。
zy473551
发表于 2011-7-30 12:08:37
回复【221楼】ARM3721
搞单片机开发以来,一直用傻孩子提到的第一种状态机思想,做一般的项目应用不成问题,后来在一个比较大的项目中用到了一种基于消息触发的状态机,状态转换是有消息触发的,而消息来自于一个循环队列(傻孩子的那种),这样,只要将不同状态下,不同消息对应的动作函数关联就可以了,状态机会自动根据消息去执行相应的动作函数。不知道傻孩子有没有搞过这样的状态机。
-----------------------------------------------------------------------
有没有图,展示一下,不是您说的不清楚,而是本人理解差!
yytgdut
发表于 2011-7-30 16:50:27
mark
hepday
发表于 2011-7-30 17:29:49
回复有内容!
Gorgon_Meducer
发表于 2011-8-1 10:12:47
to 【221楼】 ARM3721
2006年的时候写过一个你说得这种结构,并制作了一个“基于消息触发的合作式调度器”。
这个调度器就是后来我很多调度器的原型,但是基于消息处罚的合作式调度器对一般应用来说,
太过复杂,因此,我对其进行了简化。其实,与普通调度器来说,这种方式的差别在于任务的
函数圆形里面要增加一个消息的入口,而消息里面要增加一个函数指针来记录消息的接受方和
消息的发送方。这样的好处是,调度器可以直接根据消息来执行消息的接收函数,而接受函数
也可以选择:直接根据保存在消息内的发送方信息回复消息而实现快速响应,也可以通过普通
的消息队列来回复数据,实现多任务的轮转。
不过这种方式的缺点是,需要大量的堆来传递消息,以及打包在消息中的数据。相对普通
系统来说“重量级”太大。同时,为了简化使用过程,通常也需要大量的宏来对繁琐的操作——
比如动态申请空间并保存要传递的数据到这一空间中(牵涉到数据的序列化问题)——进行简化。
用起来还是很不错的,不过这类系统堆崩溃的后果是非常严重的,并且还非常难以调试。
electron_love
发表于 2011-8-4 19:48:20
不知道这是不是状态机?
我把很多任务(暂且这么叫吧)分成函数写,比如,数码管显示,我想刷新50hz,我8个管我就写400hz的定时器,每次刷新一个位0键盘我20hz扫描吧,我定时器每触发20次我扫描一次键盘...
或者这叫做什么?
xooogo
发表于 2011-8-7 23:27:38
先马克保存
zenghl
发表于 2011-8-8 07:23:03
学习!
linhao1581
发表于 2011-8-8 08:23:03
回复【15楼】Gorgon Meducer傻孩子
不会被诸如
按键扫描程序和数码管扫描程序无法很好协调工作的问题困惑,
甚至在缺乏引导的情况下,养成非常不好的习惯,对由于这些习
惯本身容易导致的栈溢出问题,存储器使用不当(指针类问题),
产生恐惧心理。
-----------------------------------------------------------------------
感触良多,高手就是不一样,一语中的
nicksean
发表于 2011-8-8 09:10:38
感觉LZ是个伟大的思想者,佩服!
Gorgon_Meducer
发表于 2011-8-8 12:51:59
to 【226楼】 electron_love
认真说来,这的确是一种状态机,用时间作为状态转换的触发条件。
不过从你的使用方式来看应该对状态机的概念还很模糊,应该说还不知道
怎样编写一个状态机。你应该尝试一下普通的switch case方式。
dong889
发表于 2011-8-8 13:30:16
MARK 学习
楼主真是高手啊~知识扎实,很会写论文~~而且论坛上夜经常的发表好多好文章,举双手双脚支持啊!
lwcode
发表于 2011-8-13 10:24:45
傻孩子的思想太棒了,昨天才开始关注状态机的,以前要么直接移植一个操作系统写任务,要么就是简单的前后台,真是惭愧……以前也知道状态机,学数字电路时最先接触,后来知道程序里也能这么用,不过一直没上心。一直在思考怎样才能将裸机程序中的延时空跑去掉,不要做那么傻的事情,而又不必像操作系统那样,任务调度时一阵狂压栈,一搜也是这个论坛上看到,发现了状态机可以解决,经昨晚验证和思考,设计了一个两层状态环境:有一个主状态层,在main函数的大循环里,用于管理个状态任务;子状态层就是各任务中的函数里的小状态,因为有超时,用了一个定时中断来管理超时状态切换,在实验的时候又加了一个简单的调度器,防止活动的状态被挂起而不再执行。状态机+调度器,太完美了,顿觉相见恨晚,如有利器在手!今日兴冲冲一见傻孩子的帖子,竟然无比亢奋,傻孩子走在我前面太多了,要努力!哈哈,如果对比一下操作系统的任务切换和状态机的状态切换将会很有意思。傻孩子说的状态机才是嵌入式的或者是数字系统的万能语言,太对了。继续修炼~
lovewwy
发表于 2011-8-13 10:41:27
学习,先MARK再看
defineme
发表于 2011-8-17 16:38:00
照这么说一般人写的单片机程序都是状态机的,状态就是程序中的标志位(我一般会用标志位来标志一个时间什么的),我可以这么认为吗?
傻孩子将标志位集中管理,并上升到理论高度。
单片机一般程序是无限循环的吧,那最外层的状态应该是无限执行的吧!(保持为true)————我说的是一般状态。
uestc
发表于 2011-8-17 16:43:55
顶啊
lingfei
发表于 2011-8-21 20:23:07
不顶不行啊,喜欢从哲学方面去思考这些问题,但是没有傻孩子聪明啊,得努力学啊
pcbddd
发表于 2011-8-21 21:54:50
gaga,mark!!
huang_wei
发表于 2011-8-25 14:06:49
受益匪浅
Gorgon_Meducer
发表于 2011-8-25 14:34:39
to 【236楼】 defineme
这种说法本身很有雄辩地感觉。其实我之前给出过答案:同样的代码,看得人不同,就是不一样的理解。
解释来说就是,如果你心中没有状态机,状态机代码在你看来什么也不是。
jacky82512
发表于 2011-8-30 09:15:59
来迟到了,还得顶个
leiwen_ourdev
发表于 2011-8-30 10:10:22
这个得要学习呀
pengxin213
发表于 2011-8-30 18:44:14
mark
bingshuihuo888
发表于 2011-8-31 22:28:54
mark
caaron168
发表于 2011-9-15 16:02:11
mark
chenruichao
发表于 2011-9-15 16:53:24
mark
zwb27
发表于 2011-9-15 17:06:19
这个我只能说相见恨晚啊~不过还是先MARK一下,再谢谢一下,再佩服很多下,不光是技术还有哲学方面的境界。
yujian12365
发表于 2011-9-15 20:29:59
MARK一下。
overmountain
发表于 2011-9-15 22:03:38
其实我觉得楼主所说的第二种状态机虽然灵活,但是状态很多的话容易引起混乱,中间的几个帖子其实提到这个问题,所以应该思考加入同步信号!有经验的高人不妨多贡献一些
Helloeveryon
发表于 2011-10-15 18:52:19
不知道MARK过没有。。
liwboy
发表于 2011-10-15 19:36:46
顶一下楼主!
gameboy22
发表于 2011-10-15 22:12:00
记号一下,非常有用哈~~
Forever
发表于 2011-10-15 22:48:46
mark
xiongxie007
发表于 2011-10-16 00:37:42
mark
BCE312
发表于 2011-10-16 00:41:13
好好学习。
avrlv
发表于 2011-10-16 10:19:03
牛x
xiongxie007
发表于 2011-10-16 10:44:48
mark
vjcmain
发表于 2011-10-16 11:08:36
果断mark
Gorgon_Meducer
发表于 2011-10-17 09:53:00
to 【250楼】 overmountain
解决“状态混乱”的问题不是通过信号量,而是通过正确的程序设计流程和原则。
首先能想到的就是:对于较为复杂的状态系统,一定要首先绘制状态图,通过状态图
检查程序逻辑的可靠性,然后再直接将状态图翻译成对应的状态机代码。另外一种途
径用来避免较为复杂的状态系统就是,注意状态机的模块化封装问题——这可以说是
程序设计的老命题的,无非就是高内聚、低耦合,适当的扇入和扇出数量,这里我就
不赘述了。总之一个原则,本地化信息一定要本地化处理。尽可能避免状态机的状态
变量全局化,状态变量全局化似乎可以很容易的实现状态的汇报以及“随时随地的复
位”,但这是一个非常严重的破坏封装的行为,系统的不稳定性由此而来,具体危害
我就不多说了,你懂的。
非常感谢你的建议。作为一种状态机编写方式,是否加入更多起他的要素,这实
际上就是丢给使用者根据需要去扩充的。
zzw223226
发表于 2011-10-17 14:10:50
感觉跟ucos有点像,刚接触了点ucos
fengyinkaiziye
发表于 2011-10-19 15:34:19
很崇拜你 呵呵
renwocai
发表于 2011-10-21 16:18:21
呵呵,尽管我还没有用状态机写过一个程序,但之前写过PLC的状态转移图,看过一个51的简单例子
能不能这样理解,状态机思想把事件分为状态,状态转移的条件(按键的按下,时间的流逝等),状态转移的方向三个要素,所不同的是,PLC的状态转移图可以直接提供傻瓜式的框架,只需要往里面填写这三个要素,而单片机则需要我们自己组织语言来达到同一目的?
wangqi509
发表于 2011-10-31 15:10:32
标记下,以后慢慢看!
Gorgon_Meducer
发表于 2011-10-31 19:07:05
to 【263楼】 renwocai 任我菜
没有错,你理解得比较准确。
Mcu_2009
发表于 2011-10-31 22:22:56
记下明天看
chenguanghua
发表于 2011-11-6 13:22:42
状态机学习中.....
zm110911
发表于 2011-11-8 00:33:57
MARK、、、
wwqq
发表于 2011-11-8 08:37:20
mark
cxbing001
发表于 2011-11-8 08:59:36
mark,一直在做状态机,都是根据自己的理解来设计,终于有文字表达了!!!
wb156351
发表于 2011-11-9 20:12:05
顶大孩子!
l09046162
发表于 2011-11-16 14:45:09
mark下 慢慢看!!!!
chaled
发表于 2011-11-16 15:06:23
用过几天IAR的visual state 。感觉是很舒服!
chen1177
发表于 2011-11-19 01:04:26
mark下 慢慢看!!!!
leon11hk
发表于 2011-11-21 00:46:32
状态机^^ 老早以前就有听起过, 学51时自已用过这种方法也不知道! 那时同事(我的老师呢)就教我用asm 来写一个swatch,
後来在数字设计的课堂中老师就说起这个名字, 那时并不是教软件. 而是在上fpga 练习... 其实那时我就觉得编程是可以用上这种方式的,
在那之前我并不了解状态机是个什麽东西. 但一直以来我就没用过这种方式来做项目, 而我开始使用这种方式是在我转职後接的第一个项目.
那时工作量太大, 公司也要我一个人完成! 而当时就看到ouravr 里的一篇文章
应该是 HotPower 高人写的 一个零消耗按键的状态机... 好像差不多这个意思.
那时真的有电到的感觉!那时就用上了!
如果一个状态机制是不难理解的(其实一个状态机制里也可以包括很多层的就像时.分.秒.一样,还有就是在不同层里做的触发式),
但如果有很多个状态机制, 还有状态嵌套?还有中断中的状态机制就更加烦了...
写出来了简单的好理解, 好维护, 复杂的就好花一段时间...每个机制里都可能会有关系的.
而效率真不错的, 但是!其中最烦人的就是优化问题... (状态数量, 消耗, 还要根据实际情况作调整, 有时还要作假状态)
我不知道要找那些书可以该我学习到而且用在mcu上, 傻孩子出状态机的书我一定会买的^^期待你这书快点出来.
你之前的书也有买, 我是觉得书中的思考方式跟我的差不多, 只不过...
duzhang
发表于 2011-11-21 08:33:39
记下三个板斧
mazzz
发表于 2011-11-21 08:39:33
太好了
xinyuhjj
发表于 2011-11-21 18:16:19
MARK了
f371575950
发表于 2011-11-21 18:24:29
学习了,记一个
lixupeng
发表于 2011-11-22 20:42:47
mark!!
alamo2009
发表于 2011-11-30 21:46:46
mark
jiangchao3393
发表于 2011-12-2 18:50:35
学习了,mark
psocfans
发表于 2011-12-2 20:30:10
mark
hawk2003455
发表于 2011-12-3 15:38:05
MARK了 慢慢理解
chahu1227
发表于 2011-12-3 19:25:09
mark
lw-seed
发表于 2011-12-3 20:01:35
这世界很小,今天用不上不代表明天也不用,支持顶下。
wangqh1983
发表于 2011-12-4 12:58:02
mark
zhenke
发表于 2011-12-4 17:43:15
Mark!
jyjmaster
发表于 2011-12-4 18:25:35
mark..
ziran902
发表于 2011-12-9 10:15:48
大家应该有意无意都在用状态啊
pchf005
发表于 2011-12-9 10:49:11
ding
tcy6522
发表于 2011-12-18 23:37:57
回复【263楼】renwocai 任我菜
呵呵,尽管我还没有用状态机写过一个程序,但之前写过plc的状态转移图,看过一个51的简单例子
能不能这样理解,状态机思想把事件分为状态,状态转移的条件(按键的按下,时间的流逝等),状态转移的方向三个要素,所不同的是,plc的状态转移图可以直接提供傻瓜式的框架,只需要往里面填写这三个要素,而单片机则需要我们自己组织语言来达到同一目的?
-----------------------------------------------------------------------
抽象以后是一样的数学模型,学plc的人状态机是编程的入门功夫
meirenai
发表于 2011-12-19 16:23:14
mark 状态机
zhaoliang056
发表于 2012-1-2 16:43:36
mark
msdac
发表于 2012-1-2 18:13:32
马克一下
li0709
发表于 2012-1-2 18:35:37
我也先收藏起来
cjc2010
发表于 2012-1-2 22:00:27
ww
Earthman
发表于 2012-1-2 23:28:36
都来M了,我也来
fengyuganyu
发表于 2012-1-2 23:58:25
回复【楼主位】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
Mark
weihei
发表于 2012-1-3 00:10:18
好东西。还在探索ING....
zzz1367
发表于 2012-1-3 10:15:40
3 axe
qingyin2009
发表于 2012-1-3 10:18:16
水有点深了,慢慢了解
jyjmaster
发表于 2012-1-3 11:49:34
MARK
fanmingming
发表于 2012-1-3 12:07:03
回复【楼主位】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
这个一定要mark
wazhiyi
发表于 2012-1-3 12:35:45
mark
beiwei23du
发表于 2012-1-3 16:19:53
mark,做键盘程序时用到过....
xuanke
发表于 2012-1-3 20:18:51
mark