打印

ADS中取数据终止的问题

[复制链接]
3933|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gql1123|  楼主 | 2007-9-11 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
embed9527| | 2007-9-24 14:26 | 只看该作者

跟踪调试找大概位置

一般都是采用单步、断点等调试方法,找到大致的范围在分析程序。猜测+跟踪+判断。

使用特权

评论回复
板凳
xieqin| | 2007-9-25 08:43 | 只看该作者

一个最有效果的办法

AXD menu->option->configure Processor...->把vector catch全部禁用. 这样就不会存在莫名其妙的Data Abort了.

^_^

使用特权

评论回复
地板
embed9527| | 2007-9-25 09:22 | 只看该作者

最好不要关掉

从来就没有莫名奇妙的数据中止,肯定是有问题的,最好不要关掉。

使用特权

评论回复
5
gql1123|  楼主 | 2007-9-26 08:47 | 只看该作者

多谢4楼

我想问的是有没有办法在程序进入取数据终止后通过观察某些寄存器的值来定位取数据终止的地方啊?

使用特权

评论回复
6
农民讲习所| | 2007-9-26 10:55 | 只看该作者

r14是终止的地址

使用特权

评论回复
7
wlq_9| | 2007-9-26 11:40 | 只看该作者

楼上正解.

其它方法都是治标不治本.通过R14,查看是在执行什么语句发生的中止,继而判断是什么原因引起的.

使用特权

评论回复
8
nj手术刀| | 2007-9-26 12:16 | 只看该作者

RAM调试终止通常确如ZLG所说,因为CODE在RAM中

如果数组越界写,把原来放CODE的空间改了,就不能正常调试了

使用特权

评论回复
9
jinan1861| | 2007-9-26 15:26 | 只看该作者

请问6楼7楼的大侠

怎么才能根据R14查看是在执行什么语句?

使用特权

评论回复
10
vimman| | 2007-9-26 20:41 | 只看该作者

打开list功能通过R14定位函数

ADS配置里头有个list功能,可以输入memory map文件,在data abort处设置一个端点,等程序跑到这时,查看该模式下R14,对比memory map中哪个函数的地址范围包括这个地址,就可以确定肯定是这个函数有问题。

使用特权

评论回复
11
wlq_9| | 2007-9-27 09:03 | 只看该作者

一个比较简单的办法

在中止的地方放个断点.在那边放条把R14送回PC的指令,这样就能很快速的找到地方了.没有SDRAM的ARM,不推荐在RAM下调试,8楼说的情况一般不会出现,因为分散装载文件一般都把RAM和CODE区分的很开,基本上不会出现指针修改到CODE的情况.

使用特权

评论回复
12
vimman| | 2007-9-27 13:06 | 只看该作者

11楼的办法更妙

如题!

使用特权

评论回复
13
syzhou1314| | 2008-1-29 10:57 | 只看该作者

11楼说的是这样做的吗?

  将以下代码
"    
;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        B       DataAbort
"
改成:
"
      
;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        mov     PC,LR
        B       DataAbort
"
然后在"mov     PC,LR"处设一断点,等程序执行到这里的时候,单步执行程序就会跳到LR所指向的代码地址,该地址就是发生取数据异常的地方?

使用特权

评论回复
14
mbarry0426| | 2014-9-3 11:46 | 只看该作者
syzhou1314 发表于 2008-1-29 10:57
  将以下代码"    ;取指令中止PrefetchAbort    &nbsp ...

你好 我也遇到这问题了  请问你现在有定位出错地方的方法了么

使用特权

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

本版积分规则

5

主题

34

帖子

1

粉丝