|  | 
 
| 
本帖最后由 i386 于 2014-6-6 21:04 编辑
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册  
 为了测试ARM的 data abort 异常,写了如下代码,故意访问1M意外没有被映射的区域:
 00000000     ldr sp, =0x10000000000004     add sp, sp, #800000008     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导致的。
 | 
 |