阅读:1768回复:6
WINCE5。0 2440电源唤醒后系统崩溃了,大家指点一下
Touch Power Off
++ Enter OEMPOWER. <----挂起到这里停止 -- Exit OEMPOWER. <----唤醒开始 s2440INT->rSRCPND = 0x2000000 s2440INT->rINTPND = 0x0 s2440INT->rINTMOD = 0x80 s2440INT->rINTMSK = 0x7fffbf7f Data Abort: Thread=8fdbf650 Proc=8e04bd30 'device.exe' AKY=00000039 PC=8c22ead0(NK.EXE+0x0002ead0) RA=8c22eac0(NK.EXE+0x0002eac0) BVA=0800004f FSR=00000003 Data Abort: Thread=8fdbf650 Proc=8e04bd30 'device.exe' AKY=00000039 PC=8c225718(NK.EXE+0x00025718) RA=8c225708(NK.EXE+0x00025708) BVA=0800004f FSR=00000003 Data Abort: Thread=8fdbf650 Proc=8e04bd30 'device.exe' AKY=00000039 PC=8c225718(NK.EXE+0x00025718) RA=8c225708(NK.EXE+0x00025708) BVA=0800004f FSR=00000003 Data Abort: Thread=8fdbf650 Proc=8e04bd30 'device.exe' AKY=00000039 PC=8c224f0c(NK.EXE+0x00024f0c) RA=8c224f58(NK.EXE+0x00024f58) BVA=08000015 FSR=00000003 Data Abort: Thread=8fdbf650 Proc=8e04bd30 'device.exe' AKY=00000039 PC=8c225718(NK.EXE+0x00025718) RA=8c225708(NK.EXE+0x00025708) BVA=0800004f FSR=00000003 Exception 'Data Abort' Thread=8fdbf650 AKY=00000039 PC=a000001f BVA=08000015 R0=8c22e |
|
沙发#
发布于:2007-10-31 21:13
是不是内存里有些值已经不对了?
还有,POWEROFF时CPU是不是掉电了,如果掉电了,回来时有没有配置对. |
|
|
板凳#
发布于:2007-11-07 15:06
感谢老大的回答。我做了几个实验,第一,在唤醒后不进入内核,而在BOOT里面打映内存,内存数据都在,说明没有掉电。第二,OEMPowerOff函数中不断进行打印,发现只要不退出这个函数,不会崩溃。第三,如果在唤醒后清除掉标志,让内核重启,能够正常运行。
现在毫无头绪,恳请各位大侠指点 |
|
地板#
发布于:2007-11-07 15:58
第三,如果在唤醒后清除掉标志,让内核重启,能够正常运行。
清除什么标志? |
|
地下室#
发布于:2007-11-07 20:53
你这几种测试并不能说明问题,
如果EBOOT里看到RAM中的值没有问题,可以把驱动都去掉,看看能不能正常, 如果是正常的,就比较好办了,把驱动一个个地拿掉,看看是谁的问题。 |
|
|
5楼#
发布于:2007-11-13 18:53
多谢楼上的各位大侠,,已经解决了。。。我说的清除标志,指的是:rGstatus2寄存器.
现在只余下一个问题,音频驱动的powerup不好使。如果正在播放MP3时Sleep,醒来时,有一定机率不发声,需要重新停止后再播放。但这样做会引发一个异常。如果不是正在播放的过程中,则可以正常唤醒。另发现,播放单声道MTV时不存在这个问题,这个问题只发生在立体声16位播放的时候。跟踪后,发现在这个函数里面发生了异常。。 PBYTE OutputStreamContextS16::Render2(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast) { LONG CurrT = m_CurrT; LONG DeltaT = m_DeltaT; LONG CurrSamp0 = m_CurrSamp[0]; LONG CurrSamp1 = m_CurrSamp[1]; LONG PrevSamp0 = m_PrevSamp[0]; LONG PrevSamp1 = m_PrevSamp[1]; PBYTE pCurrData = m_lpCurrData; PBYTE pCurrDataEnd = m_lpCurrDataEnd; LONG fxpGain = m_fxpGain; LONG OutSamp0; LONG OutSamp1; while (pBuffer < pBufferEnd) { while (CurrT >= 0x100) { if (pCurrData>=pCurrDataEnd) { goto Exit; } CurrT -= 0x100; PrevSamp0 = CurrSamp0; PrevSamp1 = CurrSamp1; PPCM_SAMPLE pSampleSrc = (PPCM_SAMPLE)pCurrData; CurrSamp0 = (LONG)pSampleSrc->s16.sample_left; CurrSamp1 = (LONG)pSampleSrc->s16.sample_right; pCurrData+=4; } OutSamp0 = PrevSamp0 + (((CurrSamp0 - PrevSamp0) * CurrT) >> 8); OutSamp0 = (OutSamp0 * fxpGain) >> VOLSHIFT; OutSamp1 = PrevSamp1 + (((CurrSamp1 - PrevSamp1) * CurrT) >> 8); OutSamp1 = (OutSamp1 * fxpGain) >> VOLSHIFT; CurrT += DeltaT; // DEBUGMSG(1, (TEXT("PrevSamp0=0x%x, CurrSamp0=0x%x, CurrT=0x%x, OutSamp0=0x%x\r\n"), PrevSamp0,CurrSamp0,CurrT,OutSamp0)); if (pBuffer < pBufferLast) { OutSamp0 += ((HWSAMPLE *)pBuffer)[0]; OutSamp1 += ((HWSAMPLE *)pBuffer)[1]; #if USE_MIX_SATURATE // Handle saturation if (OutSamp0>AUDIO_SAMPLE_MAX) { OutSamp0=AUDIO_SAMPLE_MAX; } else if (OutSamp0<AUDIO_SAMPLE_MIN) { OutSamp0=AUDIO_SAMPLE_MIN; } if (OutSamp1>AUDIO_SAMPLE_MAX) { OutSamp1=AUDIO_SAMPLE_MAX; } else if (OutSamp1<AUDIO_SAMPLE_MIN) { OutSamp1=AUDIO_SAMPLE_MIN; } #endif } ((HWSAMPLE *)pBuffer)[0] = (HWSAMPLE)OutSamp0; ((HWSAMPLE *)pBuffer)[1] = (HWSAMPLE)OutSamp1; pBuffer += 2*sizeof(HWSAMPLE); } Exit: m_dwByteCount += (pCurrData - m_lpCurrData); m_lpCurrData = pCurrData; m_CurrT = CurrT; m_PrevSamp[0] = PrevSamp0; m_PrevSamp[1] = PrevSamp1; m_CurrSamp[0] = CurrSamp0; m_CurrSamp[1] = CurrSamp1; return pBuffer; } |
|
6楼#
发布于:2008-01-22 09:07
请问楼主,你是怎么解决的?我也遇到唤醒后一用外设就死机的问题。我的EMAIL: niuyimail@126.com QQ:75011221希望能跟你交流。
|
|