Debugging ARM数据中止错误异常调试

Debugging ARM数据中止错误异常调试,debugging,embedded,arm,iar,Debugging,Embedded,Arm,Iar,所以现在我知道我得到了一个ARM数据中止异常-我知道如何捕获异常本身(STL库中的一个错误地址),但我想在异常发生之前返回堆栈帧。我正在使用IAR工具链,它告诉我在异常发生后调用堆栈不可用-有没有一种技巧可以说服工具向我显示调用堆栈?谢谢你的快速帮助 如果您查看ARM(ARM架构参考手册,只需谷歌“ARM”),程序员模型->处理器模式和寄存器部分。在中止模式下,您被赋予特权,因此您可以从中止切换到say supervisor,然后复制r13,然后切换回中止模式并从r13的副本转储堆栈。r14还告

所以现在我知道我得到了一个ARM数据中止异常-我知道如何捕获异常本身(STL库中的一个错误地址),但我想在异常发生之前返回堆栈帧。我正在使用IAR工具链,它告诉我在异常发生后调用堆栈不可用-有没有一种技巧可以说服工具向我显示调用堆栈?谢谢你的快速帮助

如果您查看ARM(ARM架构参考手册,只需谷歌“ARM”),程序员模型->处理器模式和寄存器部分。在中止模式下,您被赋予特权,因此您可以从中止切换到say supervisor,然后复制r13,然后切换回中止模式并从r13的副本转储堆栈。r14还告诉您中止发生的位置


如果这次中止是由一条直线引起的,我不会感到惊讶。试图读/写一个字,其地址的下两位不是零,或者一个半字的地址集是lsbit。实际上,如果您使用链接寄存器和寄存器转储(r0-r12),因为abort和user/supervisor使用相同的寄存器空间,那么您可以查看导致abort的指令和地址,看看它是否确实是对齐问题或其他问题。请注意,根据中止的模式thumb或arm,pc的前面有一条、两条或三条指令,如果您根本没有使用thumb,则无需担心。

如果您还没有使用armarm,则一定要获取armarm。这是一本难以置信的书。中止可能来自对齐,取决于您如何将mmu/mpu设置为非法地址。我使用的是基于OMAP的926ejs内核,实际上有一些寄存器将存储中止地址,因此请务必查阅规格表。谢谢-我将检查问题是对齐还是指针错误。如果只是对齐,我可以从异常返回吗?我有手臂,我会研究的。我想你需要弄清楚为什么会发生。如果这是对齐,那么陷阱就是帮助你不伤害你。是的,您可以返回(问题后的指令)任何问题,但它需要执行的内存访问将不会发生,并且您可能会在其他地方失败,因为您需要的数据未被读取或写入。您甚至可以禁用路线数据中止,但这只会使查找真正的问题变得更加困难。