高分求助,急!CE系统启动问题!

wyflzw   2008-9-1 10:45 楼主
CE系统经常启动不起来,开始都能启动,断电后再隔上几秒系统就起不来了,原来给别人供过小批量,现在再供就出现这个问题,软件硬件都是原来的,这批板子把RTC晶振,音频模块,USB DEVICE去掉了,出现问题后又加上了,可还是有问题,请各位大哥大姐救命!我用的是s3c2440+WINCE4.2!下面是几次的调试信息,求各位达人帮忙看看问题在哪!
这个是系统起来的正常的调试信息:
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
InitSDMMC()
-----triger SD card!-----
OEMInit Done...
Sp=ffffc7cc
OEMSetRealTime: Year: 2006, Month: 1, Day: 1, Hour: 12, Minute: 0, second: 0 rcnr=1h
OEMSetRealTime(register): Year: 6, Month: 1, Day: 1, Hour: 12, Minute: 0, second: 0 rcnr=1h
OEMSetAlarmTime: Year: 2006, Month: 1, Day: 1, Hour: 12, Minute: 0, second: 0 rcnr=0h
r
---------------Enable alarm RTC-----------------
PWR: Process Attach
OEMInterruptEnable()
-----SYSINTR_POWER----OEMInterruptEnable-----
………………………………………………以下省略

这个也是能够起来的调试信息:和上面比较没有显示rtc部分的信息:
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
InitSDMMC()
-----triger SD card!-----
OEMInit Done...
Sp=ffffc7cc
PWR: Process Attach
OEMInterruptEnable()
-----SYSINTR_POWER----OEMInterruptEnable-----
……………………………………………………………………以下省略


这个是出现问题的调试信息:停在Sp=ffffc7cc就不往下执行了
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
InitSDMMC()
-----triger SD card!-----
OEMInit Done...
Sp=ffffc7cc

回复评论 (11)

有可能是USB驱动引起的,把USB驱动去掉,试式
点赞  2008-9-1 11:16
从你的打印信息来看,RTC驱动的打印没出来就死掉了,会不会是你的RTC驱动的问题。你查一下你的OAL部分的代码,看看从OEMInit开始到RTC驱动之间都作了些什么,应改可以找到问题。
点赞  2008-9-1 14:12
我发现在private下的loader.c文件中一个kernelfindmemory函数中在系统起来和起不来时进入了不同的if 和else中,正在努力看代码!!请知道这个函数的各位也指点指点!
点赞  2008-9-1 14:53
哦这个是因为内存里的数据掉电引起的

WinCe认为Warm Reset内存中的东西不会丢失,所以它在启动时检查一个Signature,如果符合它认为内存中的数据都还在,所以不再初始化
相反就认为是cold Reset,重新初始化内存管理的数据结构

现在的情况是你Cold Reset了,但是内存掉电不完全,导致Signature还在而内存中的其他数据已经被破坏了

解决的方法有两个种
1.断电后多等一会再启动
2.在OEMInit里调用NKForceCleanBoot强制Cold Boot
点赞  2008-9-1 15:54
LogPtr = (fslog_t *)PAGEALIGN_UP ((pTOC->ulRAMFree+MemForPT)| 0x20000000);

if (fForceCleanBoot || (LogPtr->magic1 != LOG_MAGIC)) {
点赞  2008-9-1 17:22
楼上的能不能说的详细点,我也找到是那的问题,我把if里去掉了,换成了1,问题解决了,可不知道原因!4楼应该正解!!
点赞  2008-9-1 17:35
你看一下在你的引导代码里有没有清memory的内容,最好清一下,之前我也遇到过这种问题?
点赞  2008-9-1 17:39
问题解决,感谢各位,结贴!!
点赞  2008-9-2 11:16
引用: 引用 5 楼 szy41 的回复:
LogPtr = (fslog_t *)PAGEALIGN_UP ((pTOC->ulRAMFree+MemForPT)| 0x20000000);

if (fForceCleanBoot || (LogPtr->magic1 != LOG_MAGIC)) {



..............
引用: 引用 4 楼 hhyh612 的回复:
哦这个是因为内存里的数据掉电引起的

WinCe认为Warm Reset内存中的东西不会丢失,所以它在启动时检查一个Signature,如果符合它认为内存中的数据都还在,所以不再初始化
相反就认为是cold Reset,重新初始化内存管理的数据结构

现在的情况是你Cold Reset了,但是内存掉电不完全,导致Signature还在而内存中的其他数据已经被破坏了

解决的方法有两个种
1.断电后多等一会再启动
2.在OEMInit里调用NKForceCleanBoot强制Cold Boot

真是太牛X了,原来早有人遇到这个问题。嘿嘿......
点赞  2009-1-21 15:32
遇到相同问题
试试!
点赞  2009-3-20 15:00
呵呵,关注,我也碰到了这个问题。
点赞  2009-8-18 23:42
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复