马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 i386 于 2014-6-6 21:04 编辑
为了测试ARM的 data abort 异常,写了如下代码,故意访问1M意外没有被映射的区域:- 00000000 ldr sp, =0x100000
- 00000004 add sp, sp, #8
- 00000008 push {r0} /* access un-mapped area, cause Data abort exception */
- 0000000C push {r1}
- 00000010 ............
复制代码
异常响应代码如下:- dabort_handler:
- sub lr, lr, 8
- ldr r0, =str_dabort
- mov r1, lr
- bl printf
- .....
- str_dabort:
- .string "Data abort exception, LR = 0x%x\r\n"
复制代码
测试得到的打印信息:
Data abort exception, LR = 0x100000
按照书上讲的,LR_abt 应该保存导致data abort异常的那条指令地址才对,但这里为什么是 0x100000 而不是 0x0000008 呢?
--------------------------
其实LR是没有问题的,最后发现是自定义函数printf里面有bug导致的。 |