找回密码
 注册
搜索
查看: 1014|回复: 3

[讨论] 高手快来指教,搞不定了耶

[复制链接]
发表于 2007-11-21 15:35:18 | 显示全部楼层 |阅读模式
发生了abort的错误,不明白exception 的地址0x0005c3d8为什么和报错的地址0x0005c3b1不一样。而且R3的地址就是报错的地址,R3不是用做参数传递的吗?我是菜鸟,请高手指教。。。。

Exception at 0x0005c3d8
ASSERT(Abort exception handler !)
Abort fault(DFSR:0x00000001): Alignment fault, Domain invalid !
Fault address :0x0005c3b1

下面是发生exception时寄存器的值:
        R0  = 0xa0000097    R1   = 0x80000000
        R2  = 0x00000400    R3   = 0x0005c3b1
        R4  = 0x0f7421aa    R5   = 0xffffffff
        R6  = 0x0f74218c    R7   = 0x00000077
        R8  = 0x00000000    R9   = 0x00000000
        R10 = 0x011effc8    R11  = 0x00000000
        R12 = 0x00057a75    R13  = 0x03fed204
        R14 = 0x0005c3d8    PC   = 0x00171b88
        SPSR= 0xa0000033    CPSR = 0xa0000097

查了一下出错的地址所对应的函数
  while((tick2 - tick1) < 30)
  {
   tick2 = SCI_GetTickCount();      //  地址为 0x0005c3b0
  }
发表于 2008-5-7 18:52:11 | 显示全部楼层
好像是取数没有对齐吧,我猜的 ....
点评回复

使用道具 举报

发表于 2008-5-11 11:21:27 | 显示全部楼层
hhh
点评回复

使用道具 举报

发表于 2008-5-17 10:48:30 | 显示全部楼层
没有提到是prefetch Abort还是Data Abort,估计是prefetch Abort

如果是ARM9芯片,五级流水线,0x0005c3d8-0x0005c3b0=0x28=40
产生错误和当前pc指针之差为(8*4)=32,LR保存下一条指令的地址,即PC+8
32+8=40

综合来说,是因为流水线和LR指向下一条指令地址造成的,R3拿来做什么都行,不一定做参数,而且你这个函数又没有参数,不过如果你是ARM7的芯片那我的推导就全错了
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-25 16:45 , Processed in 0.048012 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表