单片机跑飞

[复制链接]
4594|12
 楼主| 380121850 发表于 2009-4-14 08:53 | 显示全部楼层 |阅读模式
运行一段时间后,就会没有响应,但是模块输出电压正常,应该是跑飞了。不想用看门狗,因为程序有点大,算程序时间太麻烦了。不知道有各位有什么办法?
jetson001 发表于 2009-4-14 09:52 | 显示全部楼层

11

在程序空白空间填入复位入口
 楼主| 380121850 发表于 2009-4-14 11:26 | 显示全部楼层

还剩下几K的程序空间,怎么填呀?

 楼主| 380121850 发表于 2009-4-14 11:42 | 显示全部楼层

其实我是想知道

我也知道在空白处填上软件陷阱指令,现在问题是,我空白代码区有2K多,我怎么样才能把代码填上去呢?就是我怎么控制去写一个2K多的软件陷阱程序呢?
刘前辈 发表于 2009-4-14 13:52 | 显示全部楼层

这还不容易,写常数进去。

1、汇编语言:
ORG  XXXXH  ;空白区地址
DB 02,02,02,02,02,02,02,02,02
DB 02,02,02,02,02,02,02,02,02
...........
END
复制、粘贴吧


2、C语言

char const arr[ ]={02,02,02,02,........};

连接定位在代码空白区即可。
 楼主| 380121850 发表于 2009-4-14 14:26 | 显示全部楼层

再问个问题,假如空白区域是NOP的话

那程序跑飞后,理论上是不是应该可以再自己跑回来的?
刘前辈 发表于 2009-4-14 16:31 | 显示全部楼层

是。回到0000H。

所以你的跑飞程序,是进入了死循环,挖陷阱没有用的。

再有,如果没有外界干扰,实验室环境下,程序跑飞,那是程序的缺陷。

当然有时候,就是故意让程序跑飞,然后看看能不能冗余程序拉回来。
cooperate 发表于 2009-4-14 16:52 | 显示全部楼层

建议认真考虑下刘前辈的意见

    “如果没有外界干扰,实验室环境下,程序跑飞,那是程序的缺陷”
 楼主| 380121850 发表于 2009-4-14 17:23 | 显示全部楼层

“如果没有外界干扰,实验室环境下,程序跑飞,那是程序

这个我也考虑过,但是从逻辑上程序没有问题,况且,它是运行了一段时间后才跑飞的。这个相当郁闷,想不明白
刘前辈 发表于 2009-4-14 19:38 | 显示全部楼层

好办。

挂上仿真器全速运行。

利用仿真器的好处是:全速运行时,任意时间T按停止键,程序都停在T时刻的指令地址处。
  这样,当程序跑飞时间T,按下仿真器程序停止键,你就很容易可以知道自己的程序在什么位置死循环。



dxpol432 发表于 2009-4-14 20:39 | 显示全部楼层

陷阱要处置各标志

尤其是中断
 楼主| 380121850 发表于 2009-4-14 20:45 | 显示全部楼层

让我最郁闷的是仿真器上没有这个问题

我又试了看门狗,因为有定时器中断,我就在定时器中断里面喂狗,有一次成功复位了(狗超时),但是还是会跑飞。不知道现在算是跑飞还是死机。
ningling_21 发表于 2009-4-14 22:33 | 显示全部楼层

仿真看不到,很奇怪哦

有的仿真器,几乎什么问题都能仿真到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

79

帖子

0

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