登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

跟踪DATAABORT

作者:smartsheep 栏目:ARM技术
跟踪DATAABORT
本人写程序不够严谨,常引起内存越界导致进入到DATAABORT, 而这是很难查找原因的,请问你们是否知道怎样跟踪DATAABORT? 也就是说怎样知道程序是在哪里进入到DATAABORT的?如果能知道的话查错将方便很多。
欢迎大家讨论。

2楼: >>参与讨论
caj73
我说说
keil是这么说的:
进入DATAABORT后看 R14, R14的值 - 8就是数据异常发生的地方,
在反汇编窗口中跳到 R14-8的位置,查看该位置所在的源代码.
即使这样,也还是很难分析的, 可以分析到DATAABORT发生的位置,
但什么原因导致的则要好好分析一下程序了!


3楼: >>参与讨论
computer00
我的做法是,将R14复制到PC中,然后再切换到C代码窗口
这样我就知道在访问哪个变量的时候出错.一般是指针或者数组越界了。

本来应该要减8的,但是通常情况下都会在附近,就不减8了,如果发现不对,再减8.

4楼: >>参与讨论
wlsui
原因
一般是指针或者数组越界,还有就是子函数没有正常返回,如本来函数定义的是有返回型的,但程序中却没有正确的return,这也将导致DATAABORT

5楼: >>参与讨论
smartsheep
是的,我也看到R14-8了
这种方法还是很正确的,如果是简单的数组溢出等越界比较好查找,但是正如caj73所说, 比如出错是在A语句,但原因可能在遥远的Z语句中野指针把A语句用到的内容给改了。

6楼: >>参与讨论
computer00
但找到A语句了,就知道它用了那些东西,
然后再想想,这个东西可能在哪里被改了~~~~~~~~~大部分情况下都可以找到的。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教关于调试方式的问题?
为什么没有对系统模式下的LR进行保护
关于magicarm的问题求教
philips和同立功的翻译的DATASHEET是全世界最烂的!
请问P1.25的EINT0如何启用?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号