嵌入式--->调试时程序卡死在 LDR PC, DAbt_Addr

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
    1. 在中断处理函数打断点,查看call stack
    2. 查看硬件问题

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值