[讨论] 状态机竟然会发生这种情况!!大家来来评评理啊!

pinggougou   2015-7-1 23:14 楼主
最近一直在做一个项目,从一个小程序费时一个月多丰富完善成一个大程序!可是随着程序的增大,状态机运行越来越不稳定!十几个进程里,每次烧写,说不定哪个进程里的状态里就锁死了!但单个进程拉出来,都跑的好好的!后来,不断修正,把所有状态机里的涉及判断的变量或信号在首状态变量里初始化,这才让大部分状态机能顺利运行!可是,仍有一个状态机怎么调都不行,花了我三天时间,老板催的我都差点崩溃!最后尽然发现是:状态机变量定义和使用的顺序不同造成!即,我定义的顺序是s0,s1,s2,但使用的顺序是s0,s2,s1!!大家有遇到这种问题的吗??谁能解释解释为什么呀!! 本帖最后由 pinggougou 于 2015-7-2 10:25 编辑

回复评论 (10)

我定义的顺序是s0,s1,s2,但使用的顺序是s0,s3,s2!!
1、S3 ?笔误么?
2、内存溢出。
3、其它任务里有没有操作这几个数的造成阻塞。
4、用的那个状态机,不行的那个加入几个延时试试
点赞  2015-7-2 08:31
不会是因为亚稳态吧
点赞  2015-7-2 08:46
mark一下,看讨论~
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2015-7-2 09:07
状态机分两种,一种是事件查询式状态机,程序书写一目了然,每个状态下发生了什么事件,状态在事件里更改,把状态机函数放在主循环中扫描,或者用定时器周期唤醒扫描。但这种只能应用在实时性不高的场合,而且时间的书写顺序默认了事件触发的优先级,不是太好。另外一种是事件触发式状态机,主循环中只需判断什么状态下做什么操作,把状态的转移放在事件中断中去,这样事件的优先级就一样了,但是书写起来比较杂散,不同事件触发方式不一样,需要把原有的状态机拆分开来。针对你这种情况,一般情况下如果确定了状态机逻辑关系没问题的话,最有可能出问题的就是代码重入或者临界代码处理的时候被打断了。在操作重要数据时把中断暂时关掉,防止被打断,有些地方有代码重入的也要把中断关掉。基本就是中断惹的祸了,仔细看看中断分析一下吧
点赞  2015-7-2 09:58


笔误!使用的顺序是s0,s2,s1
点赞  2015-7-2 10:26


这里的中断是啥意思啊??并没有啊!
点赞  2015-7-2 11:38
中断 是不是 事件结构?
点赞  2015-7-2 12:10
分析代码为何s0会跳转到s2而不是s1,可以仿真看看,也可以直接用SignalTap抓下看看
点赞  2015-7-2 15:07
引用: pinggougou 发表于 2015-7-2 11:38
这里的中断是啥意思啊??并没有啊!

不好意思,我以为你是在单片机上写的程序
点赞  2015-7-2 17:10
锁存下状态转换的条件,可能是亚稳态引起的
点赞  2016-2-19 12:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复