打印

单片机异常复位

[复制链接]
4500|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 | 只看该作者
在没有仿真器的情况下,只能凭借自己的眼睛和对程序的把握了,你就看看你用过的所有的指针和数组,挨个看过去吧。。或者按照我说的第一种方法,慢慢屏蔽程序排查

使用特权

评论回复
5
ningling_21| | 2013-12-23 10:53 | 只看该作者
建议看看 “程序调试黑宝书”......

有时有LED就可以调试了。

使用特权

评论回复
6
anazel| | 2013-12-23 11:15 | 只看该作者
程序模块化,一个模块一个模块的加,慢慢排除

使用特权

评论回复
7
老鱼探戈| | 2013-12-23 11:42 | 只看该作者
先自己看看程序,找出可能出问题的某些地方,再在这些地方加些测试程序确认

使用特权

评论回复
8
ayb_ice| | 2013-12-23 11:47 | 只看该作者
复位是严重BUG
怀疑的地方先屏蔽掉,

使用特权

评论回复
9
cjseng| | 2013-12-23 11:59 | 只看该作者
没养狗,会复位,基本上是堆栈溢出的问题。

使用特权

评论回复
10
youimiss|  楼主 | 2013-12-23 12:42 | 只看该作者
ningling_21 发表于 2013-12-23 10:53
建议看看 “程序调试黑宝书”......

有时有LED就可以调试了。

江总的黑宝书看了好几遍了

使用特权

评论回复
11
jiabin1024| | 2013-12-23 15:24 | 只看该作者
在代码里添加复位源检测功能 ,如果系统有显示功能的话把它显示出来,先找出是什么原因导致的复位。

使用特权

评论回复
12
jiabin1024| | 2013-12-23 15:26 | 只看该作者
你这个每隔几次,几百次指的什么?

使用特权

评论回复
13
受不了了| | 2013-12-23 15:31 | 只看该作者
点灯、把一些复杂的部分屏蔽跳过、通过串口把某些关键的变量发送出来观测

使用特权

评论回复
14
youimiss|  楼主 | 2013-12-23 16:21 | 只看该作者
老鱼探戈 发表于 2013-12-23 11:42
先自己看看程序,找出可能出问题的某些地方,再在这些地方加些测试程序确认 ...

胖哥,我怎么才能知道堆栈有没有溢出啊

使用特权

评论回复
15
youimiss|  楼主 | 2013-12-23 16:22 | 只看该作者
jiabin1024 发表于 2013-12-23 15:26
你这个每隔几次,几百次指的什么?

正常几次,正常几百次出现异常复位

使用特权

评论回复
16
youimiss|  楼主 | 2013-12-23 16:23 | 只看该作者
受不了了 发表于 2013-12-23 15:31
点灯、把一些复杂的部分屏蔽跳过、通过串口把某些关键的变量发送出来观测 ...

这样的话,如果是堆栈溢出是不是没有效果?

使用特权

评论回复
17
youimiss|  楼主 | 2013-12-23 16:23 | 只看该作者
cjseng 发表于 2013-12-23 11:59
没养狗,会复位,基本上是堆栈溢出的问题。

请问怎么样才能知道有没有溢出呢

使用特权

评论回复
18
cjseng| | 2013-12-23 16:43 | 只看该作者
youimiss 发表于 2013-12-23 16:23
请问怎么样才能知道有没有溢出呢

直接用keil仿真运行看看,SP_max为多少?如果接近0XFF,那就危险了。

使用特权

评论回复
19
cjseng| | 2013-12-23 16:43 | 只看该作者
youimiss 发表于 2013-12-23 16:23
请问怎么样才能知道有没有溢出呢

直接用keil仿真运行看看,SP_max为多少?如果接近0XFF,那就危险了。

使用特权

评论回复
20
cjseng| | 2013-12-23 16:45 | 只看该作者
本帖最后由 cjseng 于 2013-12-23 20:45 编辑

如果不是堆栈问题,再检查下数组下标有没有越界。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

43

主题

1097

帖子

1

粉丝