juniazl
驱动牛犊
驱动牛犊
  • 注册日期2005-11-04
  • 最后登录2007-07-30
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1129回复:3

请教winCE启动时发生错误

楼主#
更多 发布于:2007-06-03 16:32
我定制的windows CE系统在板上启动不起来,我用仿真器跟了一下,发现系统在KernelStart函数中调用ARMInit函数完返回之后,在将系统设置为SVC模式时,发生取数中止。具体如下:
armtrap.s:
KernelStart
            ....
           mov     r0, #SVC_MODE:OR:0xC0
        msr     cpsr_c, r0                      ; switch to Supervisor Mode w/IRQs disabled
        mfc15   r0, c0                          ; (r0) = processor ID

        stmfd   sp!, {r6}                       ; 5th argument: &OEMAddressTable
        CALL    ARMInit
        ldmfd   sp!, {r6}

        mov     r1, #SVC_MODE
        msr     cpsr_c, r1                      ; switch to Supervisor Mode w/IRQs enabled
                      <-------------系统在执行上面这条指令时发生daa abort错误
        CALL    KernelInit                      ; initialize scheduler, etc.
        mov     r0, #0                          ; no current thread
        mov     r1, #ID_RESCHEDULE
        b       FirstSchedule
我将发生错误的指令放到bios的start.s中,发现这条指令是可以正确执行的。
郁闷了,KernelStart那部分可是微软的代码呀...
请教一下各位大侠,问题可能会出现在哪个地方呢?
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-08 21:31
你的代码是放在什么地方的?
可能是代码已经错了吧.
学海无涯
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
板凳#
发布于:2007-06-16 23:53
我觉得是中断使能了的缘故,可能已经有中断来了,但处理有问题,上面的代码不可能出现Data Abort异常的,还有如果是代码错了,就不是Data Abort异常,而是Prefetch Abort异常。
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-06-22 07:08
引用第2楼zhengshijie于2007-06-16 23:53发表的  :
我觉得是中断使能了的缘故,可能已经有中断来了,但处理有问题,上面的代码不可能出现Data Abort异常的,还有如果是代码错了,就不是Data Abort异常,而是Prefetch Abort异常。



有道理.呵呵
学海无涯
游客

返回顶部