ADS中取数据终止的问题

[复制链接]
 楼主| gql1123 发表于 2007-9-11 13:32 | 显示全部楼层 |阅读模式
arm7用ads调试时经常出现取据终止的问题。问周立功,那边说是指针或者数组越界。调试的时候怎么才能知道是哪个指针或者数组越界呢?
embed9527 发表于 2007-9-24 14:26 | 显示全部楼层

跟踪调试找大概位置

一般都是采用单步、断点等调试方法,找到大致的范围在分析程序。猜测+跟踪+判断。
xieqin 发表于 2007-9-25 08:43 | 显示全部楼层

一个最有效果的办法

AXD&nbsp;menu-&gtoption-&gtconfigure&nbsp;Processor...-&gt把vector&nbsp;catch全部禁用.&nbsp;这样就不会存在莫名其妙的Data&nbsp;Abort了.<br /><br />^_^<br />
embed9527 发表于 2007-9-25 09:22 | 显示全部楼层

最好不要关掉

从来就没有莫名奇妙的数据中止,肯定是有问题的,最好不要关掉。
 楼主| gql1123 发表于 2007-9-26 08:47 | 显示全部楼层

多谢4楼

我想问的是有没有办法在程序进入取数据终止后通过观察某些寄存器的值来定位取数据终止的地方啊?
农民讲习所 发表于 2007-9-26 10:55 | 显示全部楼层

r14是终止的地址

  
wlq_9 发表于 2007-9-26 11:40 | 显示全部楼层

楼上正解.

其它方法都是治标不治本.通过R14,查看是在执行什么语句发生的中止,继而判断是什么原因引起的.
nj手术刀 发表于 2007-9-26 12:16 | 显示全部楼层

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

如果数组越界写,把原来放CODE的空间改了,就不能正常调试了
jinan1861 发表于 2007-9-26 15:26 | 显示全部楼层

请问6楼7楼的大侠

怎么才能根据R14查看是在执行什么语句?<br />
vimman 发表于 2007-9-26 20:41 | 显示全部楼层

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

ADS配置里头有个list功能,可以输入memory&nbsp;map文件,在data&nbsp;abort处设置一个端点,等程序跑到这时,查看该模式下R14,对比memory&nbsp;map中哪个函数的地址范围包括这个地址,就可以确定肯定是这个函数有问题。
wlq_9 发表于 2007-9-27 09:03 | 显示全部楼层

一个比较简单的办法

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

11楼的办法更妙

如题!
syzhou1314 发表于 2008-1-29 10:57 | 显示全部楼层

11楼说的是这样做的吗?

&nbsp;&nbsp;将以下代码<br />&quot;&nbsp;&nbsp;&nbsp;&nbsp;<br />;取指令中止<br />PrefetchAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrefetchAbort<br /><br />;取数据中止<br />DataAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataAbort<br />&quot;<br />改成:<br />&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;取指令中止<br />PrefetchAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrefetchAbort<br /><br />;取数据中止<br />DataAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataAbort<br />&quot;<br />然后在&quot;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,LR&quot;处设一断点,等程序执行到这里的时候,单步执行程序就会跳到LR所指向的代码地址,该地址就是发生取数据异常的地方?
mbarry0426 发表于 2014-9-3 11:46 | 显示全部楼层
syzhou1314 发表于 2008-1-29 10:57
&nbsp;&nbsp;将以下代码&quot;&nbsp;&nbsp;&nbsp;&nbsp;;取指令中止PrefetchAbort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ...

你好 我也遇到这问题了  请问你现在有定位出错地方的方法了么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

34

帖子

1

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

5

主题

34

帖子

1

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