MCU:LPC2148
内核:ARM7
现象
- 现象1: 程序打了断点后,调试一段再运行起来之后卡死在
LDR PC, DAbt_Addr
; Exception Vectors ; Mapped to Address 0. ; Absolute addressing mode must be used. ; Dummy Handlers are implemented as infinite loops which can be modified. Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr ;@ 0x10: 数据访问终止导致的异常的向量地址 NOP ; Reserved Vector ; LDR PC, IRQ_Addr LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr LDR PC, FIQ_Addr
- 现象2: 程序中使用虚拟Flash,使用RS485通信,多个相同设备连接时,会不定时(有时候上电出现,有时候上电过一会儿再出现)出现
LDR PC, DAbt_Addr
,进入DAbt_Hander
中
问题分析
- 数据访问终止异常导致的,现象1目前只是出现在调试过程中,并且在快速Run过去的情况下不会出现这种问题,所以猜测是其他线程再次调用了此部分代码,导致数据访问的冲突
- 现象2考虑一下是否是通信相互踩了内存
Dabt_Addr 数据访问终止模式
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于处理存储器故障、实现虚拟存储器和存储器保护。
- 也就是说存储器故障,这个问题十分不好追踪,打断点在abt的handler中,查看call stack
解决办法
- 现象1:调试的时候将断点打的更深,读一下逻辑就好了,目前是没想到更好的解决办法,有遇到相同问题的小伙伴欢迎评论区讨论😄
- 现象2:
- 在中断处理函数打断点,查看call stack
- 查看硬件问题