stm32运行出错,多次烧写程序后居然好了

chylong   2010-9-6 20:01 楼主
                                 利用stm32这个平台,在iar环境下,做了一个项目,现已批量上市,前几天去国家质检那里测试的8台机器回来后,有三台不能运行,我使用仿真器烧写程序正常,但是仿真时,出现死机,停止运行时,现象是回到汇编模式,并在某个区域死循环。我也不理解为什么这样,就利用仿真器仿真烧写后,单步运行,结果发现利用step over到某个地方就死机,而利用step into就能顺利通过死机区域,我也不理解为什么,多烧写了几次以后,死机的问题居然没有了,和正常运行的程序一致了,同样在其他两台机器上,也是这种现象,最后也正常运行了,考虑到已经上市的产品,我非常担心返修率太高,请教大家给个说法,如何改进

回复评论 (25)

                                 这问题得重视。
点赞  2010-9-6 21:31
                                 的确有点奇怪
点赞  2010-9-6 21:49
的确有点奇怪
dfsa 发表于 2010-9-6 21:49
点赞  2010-9-6 22:22
我也遇到过奇怪的问题,用STM32F103ZET6的时候,把程序烧进去,刚开始能正常运行,等过几个星期再上电,发现起不来了,不管重启几次.然后用仿真器再烧写一遍就又好了。
似乎时间长了,FLASH有丢数据的嫌疑。
点赞  2010-9-7 13:01
我也遇到过奇怪的问题,用STM32F103ZET6的时候,把程序烧进去,刚开始能正常运行,等过几个星期再上电,发现起不来了,不管重启几次.然后用仿真器再烧写一遍就又好了。
似乎时间长了,FLASH有丢数据的嫌疑。 ...
正常情况下,你说的这种情况是不可能出现的。
点赞  2010-9-7 13:34
今天忙别的,刚回来。。

请问版主,"正常情况下,你说的这种情况是不可能出现的。"对这个我也是这么认为的,正常情况没有问题,因为出货快半年了,问题是我在质检实验室里做完实验回来后才发现的,内容包括高低温老化,震荡,emc,emi等各项电子实验,说实话,如果不是有特殊的办法,这次实验就砸了,钱也就白交了。

“确实奇怪,但奇怪的不是有问题,而是楼主没说是什么程序造成的,”-------怎么说那,不是一个程序,虽然是8台机器,可是机型不一致,程序也不一样,但是现象是一样的。就是楼主位描述的那样。

我非常担心低温问题,现在北方冬天温度都到-40,由于设备不在室内,会不会低温导致问题。如果那样,我那就比较被动了。原先用的时avr的,还是蛮正常的,由于别的原因,才更换成stm32的。不是替avr打广告。
另外,我还忘记一个地方,有一台机器,就是用仿真器正常烧写程序以后,开始仿真运行时,不运行。我烧写多次以后,才开始运行,然后才发生中途死机问题,就是楼主位描述的
点赞  2010-9-7 17:09
re:tsx1983
请问兄弟,你量产多少了,一台,两台不怕。我现在就是后怕批量出现这个问题
点赞  2010-9-7 17:11
                                 “会不会低温导致问题”------你在常温下做一次相同的实验,就知道是不是低温造成的了
点赞  2010-9-7 17:17
                                 看来,以后做产品,一定要做足够的测试才行了。
点赞  2010-9-7 17:28
回7楼:

1)楼主位说“在某个区域死循环”,请问这个区域是哪里?是否每片芯片都一样的区域,还是不一样的区域。

2)“发现利用step over到某个地方就死机,而利用step into就能顺利通过死机区域”,这里的“某个地方”与上述的某个区域有什么关联?什么程序?这种现象是只与地址有关,还是与指令有关,还是与操作有关?

3)高低温测试,高温是多少,低温是多少?
关于这个高低温测试问题,再请问你选择的芯片的工作温度范围是多少?


说实话,如果你希望大家帮你分析问题,就应该多给出一些具体的,甚至是量化的信息,这样分析才能有的放矢,如果只是“某个”“某种”,我们就只好瞎猜了,
点赞  2010-9-7 17:57
                                 版主分析的很精辟,希望解决问题的,就是需要多给些量化信息,这样才能对症下药
点赞  2010-9-7 18:50
                                 从两个方面一个考虑~~一个是你烧写的次数~~一个是开机的时间~~若果机子都是烧写一定次数以后机子好用,那是程序问题,这个问题不可能出现;如果机子都是开机后的某个时间点烧写~~哇~好了~~那就是硬件的问题~~就是有某个物理因素在影响机子~~
点赞  2010-9-7 18:56
                                 可能是硬件上有点小毛病吧
点赞  2010-9-7 20:06
                                 一定会再出现
点赞  2010-9-8 07:39
我遇到过的现象:
程序版本a:可正常运行
程序版本b:可正常运行,在a的基础上,比a复杂
程序版本c:在b的基础上,增加某功能,但执行此功能后程序死掉(后来发现是程序的问题)

然后,出现了奇怪的事

重复烧写几次c后(当时考虑可能是烧写错误导致死机),单片机上电后未运行后加入的功能也死机,是初始化等程序正常执行,lcd显示界面后死机;

于是烧入b程序,发现与上面同样的现象,显示出界面后死机

烧入a程序,程序正常运行

将改好的c程序烧入,程序正常运行

我想是原来的不正常的c程序由于bug而导致程序乱飞,“碰巧”修改了某处寄存器或是存储器,但是重新烧写程序却不能覆盖它,所以无法修改回来。
而原来的a恰好可以覆盖到被“碰巧”修改的地方,于是又正常了
点赞  2010-9-8 12:55
                                 关注,是不是flash部分数据丢失
点赞  2010-9-8 14:47
                                 说明你的系统不稳定,还得多次调试
点赞  2010-9-8 17:20
                                 楼主给的量化信息还是太少了
点赞  2010-9-8 18:53
我怀疑20楼的问题与程序的时序有关,可能程序中的某个地方的时序太紧凑,指令的位置移动后,造成在Flash中与地址的对齐错位,使得取指的时序发生变化而导致指令执行的时间变化。

这个问题说起来比较复杂,但与流水线和Flash的加速机制有关。
点赞  2010-9-8 22:36
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复