打印

单片机跑飞

[复制链接]
3492|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多的软件陷阱程序呢?

使用特权

评论回复
5
刘前辈| | 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,........};

连接定位在代码空白区即可。

使用特权

评论回复
6
380121850|  楼主 | 2009-4-14 14:26 | 只看该作者

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

那程序跑飞后,理论上是不是应该可以再自己跑回来的?

使用特权

评论回复
7
刘前辈| | 2009-4-14 16:31 | 只看该作者

是。回到0000H。

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

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

当然有时候,就是故意让程序跑飞,然后看看能不能冗余程序拉回来。

使用特权

评论回复
8
cooperate| | 2009-4-14 16:52 | 只看该作者

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

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

使用特权

评论回复
9
380121850|  楼主 | 2009-4-14 17:23 | 只看该作者

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

这个我也考虑过,但是从逻辑上程序没有问题,况且,它是运行了一段时间后才跑飞的。这个相当郁闷,想不明白

使用特权

评论回复
10
刘前辈| | 2009-4-14 19:38 | 只看该作者

好办。

挂上仿真器全速运行。

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



使用特权

评论回复
11
dxpol432| | 2009-4-14 20:39 | 只看该作者

陷阱要处置各标志

尤其是中断

使用特权

评论回复
12
380121850|  楼主 | 2009-4-14 20:45 | 只看该作者

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

我又试了看门狗,因为有定时器中断,我就在定时器中断里面喂狗,有一次成功复位了(狗超时),但是还是会跑飞。不知道现在算是跑飞还是死机。

使用特权

评论回复
13
ningling_21| | 2009-4-14 22:33 | 只看该作者

仿真看不到,很奇怪哦

有的仿真器,几乎什么问题都能仿真到。

使用特权

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

本版积分规则

10

主题

79

帖子

0

粉丝