阅读:1129回复:3
请教winCE启动时发生错误
我定制的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那部分可是微软的代码呀... 请教一下各位大侠,问题可能会出现在哪个地方呢? |
|
沙发#
发布于:2007-06-08 21:31
你的代码是放在什么地方的?
可能是代码已经错了吧. |
|
|
板凳#
发布于:2007-06-16 23:53
我觉得是中断使能了的缘故,可能已经有中断来了,但处理有问题,上面的代码不可能出现Data Abort异常的,还有如果是代码错了,就不是Data Abort异常,而是Prefetch Abort异常。
|
|
地板#
发布于:2007-06-22 07:08
引用第2楼zhengshijie于2007-06-16 23:53发表的 : 有道理.呵呵 |
|
|