[ZLG-ARM] 程序运行十来分钟会不定时的进入取数据终止或是取指令终

[复制链接]
3433|10
 楼主| syzhou1314 发表于 2008-1-29 09:34 | 显示全部楼层 |阅读模式
各位大侠好~!<br />&nbsp;&nbsp;&nbsp;&nbsp;最近开发用的LPC2132,程序也不是很大,烧到flash中运行,大概差不多十几分钟或更长会死机,而后用debug调试发现程序运行一段时间后会进入取数据或是取指令终止,网上说是程序中的数组越界或指针跑飞了,我检查代码也没发现有什么不妥。并不是一次都不能执行,而是执行了一段时间后进入取数据终止或取数据终止,我把LPC2132换成更大ram空间的LPC2148也是一样!<br />&nbsp;&nbsp;&nbsp;&nbsp;原因很难找,有哪位知道或是碰到这种情况?怎么解决或怎么查找原因啊?谢谢
zlgarm 发表于 2008-1-29 11:43 | 显示全部楼层

回复如下:

syzhou1314,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;对于您的问题作如下回答:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、发生中止异常大多数是由于程序的问题,常见的原因是指针操作不当引起的,所以建议您仔细查找您程序指针操作是否正确。由于LPC2000系列ARM是ARM7DIMI内核,不具有MMU,所以不应该发生中止异常。<br />&nbsp;&nbsp;&nbsp;&nbsp;2、您可以通过中止模式下的R14找到进入异常前的程序位置。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;&nbsp;zlgarm_wzj
 楼主| syzhou1314 发表于 2008-1-29 13:02 | 显示全部楼层

谢谢您的回复,我现在是这样做的

&nbsp;将startup.s中的以下代码<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 />改成:<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所指向的代码地址,该地址就是发生取数据异常的地方?,这样做对吧,我正在测!
 楼主| syzhou1314 发表于 2008-1-29 13:15 | 显示全部楼层

程序已经死掉了

程序已经死掉了,但是程序并没有停在已经设置了断点的&quot;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,LR&quot;语句处,当我点了axd中的stop按钮后,程序停在&quot;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataAbort&quot;处,为什么没有停在我的断点处呢?此时的abort模式中的LR值为&quot;0x833b9980&quot;,但是我从哪里能查到该地址对应的代码呢?请指教!谢谢
 楼主| syzhou1314 发表于 2008-1-29 13:34 | 显示全部楼层

程序指针

我又仔细检查了遍,程序中只有在定义函数形参的时候有很多指针,其他地方没有用指针,而是数组,其中我在传递实参的时候用的是数组名加1或是加2操作,<br />比如:<br />定义函数<br />void&nbsp;function(uint8&nbsp;*p)<br />{<br />..<br />}<br />调用的时候function(a+1),其中a是一个全局或局部的一维数组名!<br />这样有什么不妥吗您说?
zlgarm 发表于 2008-1-29 13:55 | 显示全部楼层

回复如下:

syzhou1314,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;您定义的指针有没有赋初值;不要通过一个没有赋初值的指针来读写数据。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;&nbsp;zlgarm_wzj
 楼主| syzhou1314 发表于 2008-1-29 14:16 | 显示全部楼层

您说我的形参指针没有赋初值??

定义函数<br />void&nbsp;function(uint8&nbsp;*p)<br />您说我这个形参指针怎样赋初值?难道要这样啊<br />void&nbsp;function(uint8&nbsp;*p=0)这样编译也通不过啊?<br />
dld2 发表于 2008-1-29 14:26 | 显示全部楼层

仔细看看程序吧

通常是野指针或者数组越界。
armecos 发表于 2008-1-29 14:27 | 显示全部楼层

《ecos增值包》里对此有解决方案,

针对2210,但应该对2132也有效。经过处理后,程序在flash里运行很稳定。<br /><br /><b>www.armecos.com</b>
zlgarm 发表于 2008-1-29 14:48 | 显示全部楼层

回复如下

syzhou1314,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;出现这样的问题通常是您在程序里通过一个没有赋初值的指针(也就是野指针)来读写数据或者您的数组越界造成的,所以建议您仔细检查您的代码,重点检查指针和数组方面的代码。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;&nbsp;zlgarm_wzj
 楼主| syzhou1314 发表于 2008-1-29 16:11 | 显示全部楼层

多谢版主以上两位的的回复

我会仔细再检查仔细研究一下的,感觉应该是程序问题~!<br />解决了我会把原因贴出来的~!我刚开始工作,可能是经验不足的原因~!呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

61

帖子

2

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