如何在arm平台上调试随机数据中止问题

时间:2012-07-13 16:39:10

标签: c embedded arm

随着基于ARM的项目的开发,我们随机获取数据,也就是当我们使用它时,我们得到数据中止中断。但是当我们使用r14或r13检查寄存器映射时,数据中止并不总是在同一点,即使检查函数回调。无论如何,我是否可以准确地获取有关数据中止的根本原因的信息?我已经尝试了ref 2,但是当我捕获有关中断的数据时却无法得到相同的结果。

相关 ARM Data Abort error exception debugging ARM: HOW TO ANALYZE A DATA ABORT EXCEPTION

1 个答案:

答案 0 :(得分:0)

按照上面Keil链接中的说明检查链接寄存器(r14)将显示触发数据中止的指令。从那里你必须弄清楚为什么它触发了数据中止以及如何发生这种情况,这是困难的部分。

根据我的经验,最有可能发生的是您访问了无效指针。由于许多原因,它可能无效。以下是一些候选人:

  1. 您在初始化之前使用了指针
  2. 您使用了指针后面的指针,或者包含内存已经被释放(并且在另一个函数分配它时随后被修改)
  3. 指针被堆栈溢出损坏
  4. 指针被其他无关的行为错误的代码破坏了
  5. 指针在堆栈上作为局部变量分配,然后在分配函数退出后使用
  6. 指针的类型对齐方式不正确(例如,尝试以uint32_t的形式访问0x4001)
  7. 如您所见,很多事情可能是ARM数据中止的根本原因。找到根本原因是使ARM软件/固件开发变得如此有趣的部分原因!祝你好运搞清楚。