单片机异常复位

[复制链接]
5223|29
 楼主| youimiss 发表于 2013-12-23 09:29 | 显示全部楼层 |阅读模式
现在用的是STC的51,程序偶尔会异常复位,有时候间隔几次出现一次,有时候间隔几十上百次才出现一次。目前把问题锁定在软件上,可手中只有一条USB转串口线,不能仿真,我该怎么看是堆栈溢出还是PC乱跳还是其他什么问题呢,用的KEIL编译器,新手。。。还不会调试程序。。。
w522930954 发表于 2013-12-23 09:56 | 显示全部楼层
这个还真没什么好办法,只能先把程序调到最容易复位的状态,再在程序里面一个模块一个模块的屏蔽,看是哪个模块出的问题,再一步一步屏蔽程序,来确定问题,。,。不过复位大多数情况下是看门狗和指针溢出导致的,可以先关狗试试。确定不是狗出的问题,再去你的程序里面看看指针的问题。
 楼主| youimiss 发表于 2013-12-23 10:07 | 显示全部楼层
w522930954 发表于 2013-12-23 09:56
这个还真没什么好办法,只能先把程序调到最容易复位的状态,再在程序里面一个模块一个模块的屏蔽,看是哪个 ...

没养狗。。。如何看指针溢出呀
w522930954 发表于 2013-12-23 10:13 | 显示全部楼层
在没有仿真器的情况下,只能凭借自己的眼睛和对程序的把握了,你就看看你用过的所有的指针和数组,挨个看过去吧。。或者按照我说的第一种方法,慢慢屏蔽程序排查
ningling_21 发表于 2013-12-23 10:53 | 显示全部楼层
建议看看 “程序调试黑宝书”......

有时有LED就可以调试了。
anazel 发表于 2013-12-23 11:15 | 显示全部楼层
程序模块化,一个模块一个模块的加,慢慢排除
老鱼探戈 发表于 2013-12-23 11:42 | 显示全部楼层
先自己看看程序,找出可能出问题的某些地方,再在这些地方加些测试程序确认
ayb_ice 发表于 2013-12-23 11:47 | 显示全部楼层
复位是严重BUG
怀疑的地方先屏蔽掉,
cjseng 发表于 2013-12-23 11:59 | 显示全部楼层
没养狗,会复位,基本上是堆栈溢出的问题。
 楼主| youimiss 发表于 2013-12-23 12:42 | 显示全部楼层
ningling_21 发表于 2013-12-23 10:53
建议看看 “程序调试黑宝书”......

有时有LED就可以调试了。

江总的黑宝书看了好几遍了
jiabin1024 发表于 2013-12-23 15:24 | 显示全部楼层
在代码里添加复位源检测功能 ,如果系统有显示功能的话把它显示出来,先找出是什么原因导致的复位。
jiabin1024 发表于 2013-12-23 15:26 | 显示全部楼层
你这个每隔几次,几百次指的什么?
受不了了 发表于 2013-12-23 15:31 | 显示全部楼层
点灯、把一些复杂的部分屏蔽跳过、通过串口把某些关键的变量发送出来观测
 楼主| youimiss 发表于 2013-12-23 16:21 | 显示全部楼层
老鱼探戈 发表于 2013-12-23 11:42
先自己看看程序,找出可能出问题的某些地方,再在这些地方加些测试程序确认 ...

胖哥,我怎么才能知道堆栈有没有溢出啊
 楼主| youimiss 发表于 2013-12-23 16:22 | 显示全部楼层
jiabin1024 发表于 2013-12-23 15:26
你这个每隔几次,几百次指的什么?

正常几次,正常几百次出现异常复位
 楼主| youimiss 发表于 2013-12-23 16:23 | 显示全部楼层
受不了了 发表于 2013-12-23 15:31
点灯、把一些复杂的部分屏蔽跳过、通过串口把某些关键的变量发送出来观测 ...

这样的话,如果是堆栈溢出是不是没有效果?
 楼主| youimiss 发表于 2013-12-23 16:23 | 显示全部楼层
cjseng 发表于 2013-12-23 11:59
没养狗,会复位,基本上是堆栈溢出的问题。

请问怎么样才能知道有没有溢出呢
cjseng 发表于 2013-12-23 16:43 | 显示全部楼层
youimiss 发表于 2013-12-23 16:23
请问怎么样才能知道有没有溢出呢

直接用keil仿真运行看看,SP_max为多少?如果接近0XFF,那就危险了。
cjseng 发表于 2013-12-23 16:43 | 显示全部楼层
youimiss 发表于 2013-12-23 16:23
请问怎么样才能知道有没有溢出呢

直接用keil仿真运行看看,SP_max为多少?如果接近0XFF,那就危险了。
cjseng 发表于 2013-12-23 16:45 | 显示全部楼层
本帖最后由 cjseng 于 2013-12-23 20:45 编辑

如果不是堆栈问题,再检查下数组下标有没有越界。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不卖开发板! http://minifairyfly.taobao.com/

43

主题

1097

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部