tianwailk
驱动牛犊
驱动牛犊
  • 注册日期2005-11-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1768回复:6

WINCE5。0 2440电源唤醒后系统崩溃了,大家指点一下

楼主#
更多 发布于:2007-10-31 09:01
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
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-31 21:13
是不是内存里有些值已经不对了?
还有,POWEROFF时CPU是不是掉电了,如果掉电了,回来时有没有配置对.
学海无涯
tianwailk
驱动牛犊
驱动牛犊
  • 注册日期2005-11-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-07 15:06
感谢老大的回答。我做了几个实验,第一,在唤醒后不进入内核,而在BOOT里面打映内存,内存数据都在,说明没有掉电。第二,OEMPowerOff函数中不断进行打印,发现只要不退出这个函数,不会崩溃。第三,如果在唤醒后清除掉标志,让内核重启,能够正常运行。
现在毫无头绪,恳请各位大侠指点
jasonshi
驱动小牛
驱动小牛
  • 注册日期2004-10-11
  • 最后登录2011-07-01
  • 粉丝2
  • 关注0
  • 积分23分
  • 威望446点
  • 贡献值3点
  • 好评度256点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-07 15:58
第三,如果在唤醒后清除掉标志,让内核重启,能够正常运行。

清除什么标志?
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-07 20:53
你这几种测试并不能说明问题,

如果EBOOT里看到RAM中的值没有问题,可以把驱动都去掉,看看能不能正常,
如果是正常的,就比较好办了,把驱动一个个地拿掉,看看是谁的问题。
学海无涯
tianwailk
驱动牛犊
驱动牛犊
  • 注册日期2005-11-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
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;
}
niuyi
驱动牛犊
驱动牛犊
  • 注册日期2006-06-08
  • 最后登录2010-02-24
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望34点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-22 09:07
请问楼主,你是怎么解决的?我也遇到唤醒后一用外设就死机的问题。我的EMAIL: niuyimail@126.com  QQ:75011221希望能跟你交流。
游客

返回顶部