none
wince休眠唤醒后中断处理问题 RRS feed

  • 问题

  • All:

    处理器PXA310.
    BSP是从wince6。

    在休眠唤醒后,系统无法响应中断,以下是log信息:

    OALIoCtlHalPreSuspend
    FSREG: Flushing registry
    Powering Off system:
    Calling GWES power proc.
    PSA2Video::PowerHandler 1
    gcu suspend!
    Calling device manager power proc.
    SDH: +SDH_PowerDown
    [MMC] SDH: +SDH_PowerDown
    SDH: +SDH_PowerDo
    [MMC] SDH: +SDH_PowerDown
    BusEnum.DLL : +PowerDown dwData=c9d2da80
    otg ENABLE SIDECAR
    ++switch to sync mode
    BusEnum.DLL : -PowerDown dwData=2
    BKL_PowerDown().
    [CDC] CDC_PowerDown
    [CDC] Sleep Entered...
    [AC97]:Ac97DeActiveHardware
    IMM_PowerDown...
    Calling OEMPowerOff...
    Enable Internal SRAM Power Domain
    Enable Internal SRAM Clock.
    Save Register Counter 19
    g_SRAM_Start is :0xabb14000
    Finish init save content
    PWER::0x8000000f AD3ER:0
    -InitDebugSerial
    Resume back from XllpPmEnterSleep
    Wakeup Source 1027, AD3SR 0x1
    [LCD]:lcd_truly_reinit.
    [LCD]: ----LCDICINIT----
    Disable Internal SRAM Clock
    Disable Internal SRAM Power Domain
    Return from OEMPowerOff
    Back from OEMPowerOff
    Calling device manager power proc.
    IMM_PowerUp...
    [CDC] CDC_PowerUp
    BKL_PowerUp().
    [OTG]: +PowerUp dwData=c9d2da80
    ++switch to sync mode
    OTG ULPI PowerUp is 4018
    [OTG]: -PowerUp dwData=ffffffff
    [USB20Device]:PowerMgr Up
    SDH: +SDH_PowerUp
    [MMC] SDH: +SDH_PoweUp
    SDH: +SDH_PowerUp
    [MMC] SDH: +SDH_PoweUp
    Calling GWES power proc.
    SA2Video::PowerHandler 0
    Returning to normally scheduled programming.
    [OTG]:GET EVENT result: 0x3e8
    [OTG]:CableIST :: cable IST waiting
    [OAL]:OALIOCtlIPM->IPROF_GET_THRESH_INFO
    [IPM] IOCTL_IPM_KERNEL[IOCTL_IPM_KERNEL] returned 100 utilization, pprofstate = 2 memEfficiency = 0
    [IPM] IOCTL_IPM_KERNEL[IOCTL_IPM_KERNEL] m_bTerminated = 0
    [IPM]:IPM_WriteMsgQueue.
    [OAL]:OALIOCtlIPM->IPROF_GET_THRESH_INFO
    [IPM] IOCTL_IPM_KERNEL[IOCTL_IPM_KERNEL] returned 100 utilization, pprofstate = 2 memEfficiency = 0
    [IPM] IOCTL_IPM_KERNEL[IOCTL_IPM_KERNEL] m_bTerminated = 0
    [IPM]:IPM_WriteMsgQueue.
    +OALIntrDisableIrqs(1, 0x829b9acc)
    +void for Zy BSPIntrDisableIrq(3)
    -BSPIntrDisableIrq(irq = 3
    -OALIntrDisableIrqs
    +USBD:HcdAttach, hcd: 0xC44656E0
    +OALIntrEnableIrqs(1, 0x829b9acc)
    +void for Zy BSPIntrEnableIrq(3)
    -BSPIntrEnableIrq(irq = 3)
    -OALIntrEnableIrqs(rc = 1)
    SetDevicePower: Wrong Return Value from 'sdh3:', returning ERROR_GEN_FAILURE
    SetDevicePower: Wrong Return Value from 'sdh2:', returning ERROR_GEN_FAILURE
    BKL_IOControl IOCTL code = 3280904
    BKL: Received IOCTL_POWER_SET
    IOCTL_POWER_SET request to D0
    +BackLightSetState+++++++ - ON
    [BKL1] Notify IPM Ready For Processor state for driver 0xfafb0004,state = 0x3
    [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0004,state = 0x3
    [IPM]:IPM_WriteMsgQueue.
    [IPM]:IPM_WriteMsgQueue.
    [IPM]: IPM_SendMessageUnnamed->Successed
    [BKL1]:IPM_SetMinOp
    [IPM]:IPM_WriteMsgQueue.
    [IPM]: IPM_SendMessageUnnamed->Successed
    [IPM]:IPM_ReadMsgQueue.
    [IPM]:IPM_ReadMsgQueue.
    [IPM]:IPM_WriteMsgQueue.
    [CDC]:Reinit codec
    [CDC] +++TouchInit()
    [CDC] Wake up!!!
    +BSPIntrActiveIrq(0x50)
    -BSPIntrActiveIrq(0x50)
    +BSPIntrActiveIrq(0x45)
    -BSPIntrActiveIrq(0x45)

    从log上看,在唤醒后,OEMInterruptHandler()函数能够接收到中断,但无法跳转到相应的中断服务程序中处理中断:其中:0x50是Touch中断,0x45是SD卡插入中断。

    感觉在唤醒后,系统丢失了一部分数据。

    请各位专家给予指导。谢谢。


    Gavin
    2011年9月1日 5:14

全部回复

  • winCE 6.0中一般使用虚的中断号,来映射event。虚的中断号可以通过以下function call得到 KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &dwIrq, sizeof( dwIrq ), &g_dwSysInt, sizeof( g_dwSysInt ), NULL ); 这里g_dwSysInt会被用来映射Event,而dwIrq和g_dwSysInt之间的映射关系是由OAL里OEM的code来维护的。 所以我怀疑,在wakeup后这个dwIrq和g_dwSysInt之间的映射table被破坏了。 你可以尝试打印出来这个table的内容,看看wakeup前后有没有变化。
    2011年9月1日 6:49
    版主
  • 谢谢您的指导。

    您说的table是指g_oalSysIntr2Irq和g_oalIrq2SysIntr么?


    Gavin
    2011年9月1日 6:52
  • 不好意思,请问,这个table在哪里?


    Gavin
    2011年9月1日 6:56
  • 您好,BSPIntrActiveIrq函数实现如下,没有进行转换啊。

    UINT32 BSPIntrActiveIrq(UINT32 irq)
    {
        OALMSG(OAL_INTR&&OAL_VERBOSE, (L"+BSPIntrActiveIrq(0x%x)\r\n", irq));
       OALMSG(OAL_INTR&&OAL_VERBOSE, (L"-BSPIntrActiveIrq(0x%x)\r\n", irq));
        return irq;
    }


    Gavin
    2011年9月1日 7:06
  • winCE 6.0中一般使用虚的中断号,来映射event。虚的中断号可以通过以下function call得到 KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &dwIrq, sizeof( dwIrq ), &g_dwSysInt, sizeof( g_dwSysInt ), NULL ); 这里g_dwSysInt会被用来映射Event,而dwIrq和g_dwSysInt之间的映射关系是由OAL里OEM的code来维护的。 所以我怀疑,在wakeup后这个dwIrq和g_dwSysInt之间的映射table被破坏了。 你可以尝试打印出来这个table的内容,看看wakeup前后有没有变化。


    打印出来了,休眠前和唤醒后table中的数据没有变化。

    现在的情况是,在唤醒后,要等待一段时间(5分钟左右),系统又恢复正常了。

    还没找到原因。


    Gavin
    2011年9月1日 7:33
  • 另外,我们现在使用的是MCP,内置一个DDR Ram,一个Flash.
    在休眠时,SDRAM是自刷新的,这个SDRAM是指的SOC片内的SDRAM,还是MCP中的DDR Dram?
    Gavin
    2011年9月1日 7:44
  • 应该是的。还有就是看OEMInterruptHandler返回的到底是不是InterruptInitialize设进去的那个g_dwSysInt值。但是OEMInterruptHandler不能打retailmsg,所以实现起来可能比较复杂,暂时不推荐
    2011年9月1日 7:51
    版主
  • 是不是,就是上次你说的wakeup函数里面有个for循环的?

    能给我看看你的code怎么会有for循环的马?

    那个5分钟的问题可能和for循环有关。

    一般来说SDRAM刷新是指片外的sdram,由于尺寸大小原因,OS Image主体和runtime memory一般是存在片外的,所以,为了保证这些数据不丢失,需要在休眠时对片外内存进行刷新。一般的DDR RAM或者SDRAM都有一个self refresh功能。进入self refresh状态后,只要保持VCC上面的电压不掉,RAM芯片内部就可以进行refresh,不需要CAS和RAS pin上的操作。

    2011年9月1日 7:57
    版主
  • 是不是,就是上次你说的wakeup函数里面有个for循环的?

    能给我看看你的code怎么会有for循环的马?

    那个5分钟的问题可能和for循环有关。

    一般来说SDRAM刷新是指片外的sdram,由于尺寸大小原因,OS Image主体和runtime memory一般是存在片外的,所以,为了保证这些数据不丢失,需要在休眠时对片外内存进行刷新。一般的DDR RAM或者SDRAM都有一个self refresh功能。进入self refresh状态后,只要保持VCC上面的电压不掉,RAM芯片内部就可以进行refresh,不需要CAS和RAS pin上的操作。


    谢谢您的指导。

    上次我说的for循环,可能是我没表达清楚。

    在有些驱动程序中,在程序执行时需要延时一段时间,原来使用的延时函数是Sleep,当在powerup()中使用Sleep时会报ERROR: Power Handler function yield to low priority thread.

    为了解决这个问题,就将powerup()中使用Sleep替换为Delay,实现如下。

    #define PXA310FCLK   (0x27000000)
    static void Delay(int time)
    {
     volatile int i, j = 0;
     volatile static int loop = PXA310FCLK/1000000; 
     for(;time > 0;time--)
      for(i=0;i < loop; i++) { j++; }  
    }

    这就是一个for循环,虽然不精确,但也可以解决问题。这样就不报上述错误了。

    解决了ERROR: Power Handler function yield to low priority thread.错误后,就发现系统在唤醒后僵死几分钟,这时底层中断能够响应,但无法跳到IST中执行,需要等待5分钟左右才能继续运行(系统不重新启动)。感觉好像系统找不到IST了。


    Gavin
    2011年9月1日 8:10
  • 估计是你的for循环让power manager无法结束,使IST没有机会执行。

    2点建议:

    1。可不可以不要在尽量避免在powerup函数中加delay

    2。你的Delay函数有问题。 loop = 0x27000000/1000000的结果是loop=654。而每次loop你都要对RAM进行好几次直接(不通过cache,每次比较操作2次读,++操作,一次读,一次写)读写。假设你的RAM是133MHz的,一次loop5次读写RAM,一次读写假设平均是10个clock cycle,那就需要差不多0.4个微秒,

    654次,就是300个微秒左右。如果你的time是以微妙为单位的,那实际Delay的时间就是原时间的300倍。

    2011年9月1日 8:32
    版主
  • 估计是你的for循环让power manager无法结束,使IST没有机会执行。

    2点建议:

    1。可不可以不要在尽量避免在powerup函数中加delay

    2。你的Delay函数有问题。 loop = 0x27000000/1000000的结果是loop=654。而每次loop你都要对RAM进行好几次直接(不通过cache,每次比较操作2次读,++操作,一次读,一次写)读写。假设你的RAM是133MHz的,一次loop5次读写RAM,一次读写假设平均是10个clock cycle,那就需要差不多0.4个微秒,

    654次,就是300个微秒左右。如果你的time是以微妙为单位的,那实际Delay的时间就是原时间的300倍。


    谢谢指导。

    根据您的建议,我查了代码和log。在唤醒后带有Delay的PowerUp函数都可以正常执行,从log上看没有在这部分产生延时。

    系统是在所有的PowerUp函数执行完毕后,产生的延时。

    如果不使用Delay和Sleep,则需要找个替代函数。

     

     


    Gavin
    2011年9月1日 8:54
  • 估计是你的for循环让power manager无法结束,使IST没有机会执行。

    2点建议:

    1。可不可以不要在尽量避免在powerup函数中加delay

    2。你的Delay函数有问题。 loop = 0x27000000/1000000的结果是loop=654。而每次loop你都要对RAM进行好几次直接(不通过cache,每次比较操作2次读,++操作,一次读,一次写)读写。假设你的RAM是133MHz的,一次loop5次读写RAM,一次读写假设平均是10个clock cycle,那就需要差不多0.4个微秒,

    654次,就是300个微秒左右。如果你的time是以微妙为单位的,那实际Delay的时间就是原时间的300倍。


    还有,IST与中断是通过Event关联的,能不能是这个Event表找不到了呢?
    Gavin
    2011年9月1日 8:57
  • 这个可能性不大,因为5分钟后,就一切正常了。

    而且event表不是OEM code。

    2011年9月1日 9:33
    版主
  • 这个可能性不大,因为5分钟后,就一切正常了。

    而且event表不是OEM code。


    有没有可能是clock或Timer这方面的问题?
    Gavin
    2011年9月5日 1:51
  • clock不太可能,因为如果它出问题的话,5分钟后也不会一切正常。 至于timer,你有process在等timer吗? 我觉得还是for loop的问题,你能不能试试看把for loop都给去掉。这样做可能会影响某些prepherial在power on之后的工作,但是可以通过其他的设备对interrupt有没有响应,来判断5分钟的delay是不是还在。
    2011年9月5日 7:37
    版主
  • clock不太可能,因为如果它出问题的话,5分钟后也不会一切正常。 至于timer,你有process在等timer吗? 我觉得还是for loop的问题,你能不能试试看把for loop都给去掉。这样做可能会影响某些prepherial在power on之后的工作,但是可以通过其他的设备对interrupt有没有响应,来判断5分钟的delay是不是还在。


    1、将Delay函数修改为如下:

    #define PXA310FCLK   (0x27000000 >> 6)
    static void Delay(int time)
    {
     volatile int i, j = 0;
     volatile static int loop = PXA310FCLK/1000000;//wsf 20081127 100000->1000000
     
     for(;time > 0;time--)
      for(i=0;i < loop; i++) { j++; }  
    }

    仍然会有延迟,无明显改善。

    2、在延迟时,log输出如下:

    .................................................

    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET request to D0
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0004,state = 0x3
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [BKL1]:IPM_SetMinOp,ipm_client_id = 0x400002
    PID:00400002 TID:016E0006 [IPM]: IPM_SetMinOp,clientID =0xfafb0004
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [IPM]: IPM_SetMinOp -> IPM_RecieveMessageUnnamed,hIPMToClientACKQ_Read =0x1cd0047
    PID:00400002 TID:016E0006 [IPM]: IPM_RecieveMessageUnnamed.lpMsg=0xc9c5f470, cbDataSize=0xc, qRecieveQueue=0x1cd0047,dwTimeout=0xbb8,
    PID:00400002 TID:016E0006 [IPM-soc]: IPM_ReadMsgQueue.hQueue=0x1cd0047, lpBuffer=0xc9c5f470, cbBufferSize=0xc,dwTimeout=0xbb8,
    PID:00400002 TID:011F003E [IPM]: ReadMsg. lpBuffer=0xca0afd54, cbBufferSize=0x110,dwTimeout=0xffffffff,
    PID:00400002 TID:011F003E [IPM-soc]: IPM_ReadMsgQueue.hQueue=0x171003f, lpBuffer=0xca0afd54, cbBufferSize=0x110,dwTimeout=0xffffffff,

    运行到这里,产生延迟,大约5分钟左右。之后,输出下列信息:

    PID:00400002 TID:016E0006 [IPM]: IPM_RecieveMessageUnnamed->Failed
    PID:00400002 TID:016E0006 [IPM]: IPM_RecieveMessageUnnamed->Failed->IPM_STATUS_READ_TIME_OUT
    PID:00400002 TID:016E0006 [IPM]: IPM_SetMinOp -> Failed
    PID:00400002 TID:016E0006 [BKL1]: MinOP Set/Release FAILED
    PID:00400002 TID:016E0006 [LCD]:SA2Video::power_ioctl,0
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0005,state = 0x7
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed

    .......................

    从log上看,是在IPM模块接收消息时,发生了堵塞。

    3、IPM_ReadMsgQueue()函数调用的是系统的ReadMsgQueue()函数,实现如下:

    BOOL IPM_ReadMsgQueue(HANDLE hQueue,LPVOID lpBuffer,DWORD cbBufferSize,DWORD dwTimeout)
    {
        BOOL bOK;
        DWORD dwLastReadMsgFlags=0,dwLastNumberOfByteRead;
        if ( hQueue==NULL)
        {
            SetLastError(ERROR_INVALID_HANDLE);
            return FALSE;
        }
        if ( lpBuffer==NULL || cbBufferSize==0)
        {
            SetLastError(ERROR_INVALID_PARAMETER);
            return FALSE;
        }
        bOK = ReadMsgQueue(hQueue,lpBuffer,cbBufferSize,&dwLastNumberOfByteRead,dwTimeout,&dwLastReadMsgFlags);
        //buffer is too small
        if ( GetLastError()==ERROR_INSUFFICIENT_BUFFER)
        {
            return FALSE;
        }
        return bOK;
    }

    4、根据以上情况,是不是有可能是ipm在从消息队列中读取消息时出现了问题。

     


    Gavin
    2011年9月6日 4:52
  • clock不太可能,因为如果它出问题的话,5分钟后也不会一切正常。 至于timer,你有process在等timer吗? 我觉得还是for loop的问题,你能不能试试看把for loop都给去掉。这样做可能会影响某些prepherial在power on之后的工作,但是可以通过其他的设备对interrupt有没有响应,来判断5分钟的delay是不是还在。

    从log看,在唤醒过程中,一些设备需要给ipm发送消息,但是在发送消息时,ipm还没有执行resume的过程。这样估计会引起堵塞,那么如何配置设备的唤醒顺序呢?
    Gavin
    2011年9月6日 6:13
  • clock不太可能,因为如果它出问题的话,5分钟后也不会一切正常。 至于timer,你有process在等timer吗? 我觉得还是for loop的问题,你能不能试试看把for loop都给去掉。这样做可能会影响某些prepherial在power on之后的工作,但是可以通过其他的设备对interrupt有没有响应,来判断5分钟的delay是不是还在。

    修改了驱动的加载顺序,就先起ipm了,接收消息也不报错了,但是仍然有一段时间无法处理中断,就是说在一段时间内touch、sd card仍然不好用。
    Gavin
    2011年9月6日 7:50
  • 我的判断正好相反,感觉上是IPM想要读消息,但是queue里没有消息可读。所以就timeout了。

    由于这里dwTimeout=0xffffffff, 所以就等了很长时间。

     

    2011年9月6日 8:47
    版主
  • 我的判断正好相反,感觉上是IPM想要读消息,但是queue里没有消息可读。所以就timeout了。

    由于这里dwTimeout=0xffffffff, 所以就等了很长时间。

     


    现在能排除ipm了,但是在resume后,仍然后卡一段时间:

    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET to D0
    PID:00400002 TID:016E0006 [FFUART]: (+)CZyloniteFFUART::SetDevicePowerState(D0) Current(D3)
    PID:00400002 TID:016E0006 [FFUART]: (+)Power On
    PID:00400002 TID:016E0006 [IPM]:IPM_IOControl->IOCTL_POWER_SET...
    PID:00400002 TID:016E0006 *** [IPM ]:IPM_IOControl->IOCTL_POWER_SET Resume ***
    PID:00400002 TID:016E0006 *** [IPM ]:IOCTL_POWER_SET 0 succeeded; passing back  ***
    PID:00400002 TID:016E0006 Back from PowerOffSystem.
    PID:00400002 TID:016E0006 Invalidating all screen bits!!
    PID:00400002 TID:016E0006 DefaultPowerStateManager::SetSystemState: state change from "resuming" to "on"
    PID:00400002 TID:0184003E [IPM] All Notify Driver ready for IPM_PROCESSOR_D0
    PID:00400002 TID:0184003E [IPM] System Power State Changed, new state is resuming
    PID:00400002 TID:0184003E [IPM] System Power State 3, resuming
    PPID:00400002 TID:0184003E [IPM] System Power State Changed, new state is on
    PID:00400002 TID:0184003E [IPM] System Power State 1, on
    PID:00400002 TID:00450066 ndisMResetCompleteStage2: Internal reset

    在出现“ndisMResetCompleteStage2: Internal reset”信息后,开始卡住,但这条信息在wince7的工程中找不到是在哪个位置。请问这是在微软封装的代码中么?


    Gavin
    2011年9月6日 9:02
  • NDIS的,应该没有source code。

    关键是结束卡住之后,第一条消息是什么,谁打出来的?

    2011年9月6日 9:15
    版主
  • NDIS的,应该没有source code。

    关键是结束卡住之后,第一条消息是什么,谁打出来的?


    下面是之后的信息:

    PID:00400002 TID:01CB0046 [OTG]:GET EVENT result: 0x0
    PID:00400002 TID:01CB0046 [OTG]:CableIST :: Timeout event
    PID:00400002 TID:01CB0046 [OTG]:CableIST :: False
    PID:00400002 TID:01CB0046 [OTG]:CableIST :: cable IST waiting
    PID:00400002 TID:02920002 [CDC] Sleep Entered...

    是USB OTG有个线程在等.


    Gavin
    2011年9月6日 9:23
  • 这个可能性不大,因为5分钟后,就一切正常了。

    而且event表不是OEM code。


    在private文件夹下的代码有些编译不了啊。编译总报错。
    Gavin
    2011年9月6日 12:22
  • 这个可能性不大,因为5分钟后,就一切正常了。

    而且event表不是OEM code。


    现在基本能确定原因:

    1、在Wakeup后有一段时间,调用 SetEvent不能触发事件处理程序。

    2、以上出现的概率很高。只有在极少数情况下,调用 SetEvent才能触发事件处理程序。

    3、这是不是wince7下的一个bug啊。


    Gavin
    2011年9月6日 12:32
  • 说实话,这个问题没碰到过。

    不过,你能肯定等相应event的thread真的是处于WaitforSingleObject状态吗? 有没有可能,它本身被其它thread剥夺了运行的机会呢?

    2011年9月7日 1:05
    版主
  • 说实话,这个问题没碰到过。

    不过,你能肯定等相应event的thread真的是处于WaitforSingleObject状态吗? 有没有可能,它本身被其它thread剥夺了运行的机会呢?


    现在发现在系统停顿这段时间内,系统不能处理Touch、SD card中断,但能处理开机键产生的中断(即响应开机键的事件(SetEvent))。

    开机键的中断处理是在底层,PMIC的驱动层处理的,与系统中间层没有直接关系。

    Touch、SD card的事件处理,都与上层应用相关。

    说不清是什么原因啊。

     

     


    Gavin
    2011年9月7日 1:25
  • 我不清楚你这里说的底层和上层是什么概念。

    据我所知,Touch驱动虽然分成MDD和PDD,但是编译后还是一个标准的stream driver,所以它也是一个一般的由device.exe管的驱动。

    OEM SD Card 驱动虽然是由SDBus调的,但是关于插拔的中断处理应该也是由OEM这边一个独立的thread来处理的。

    所以我看不出这些中断处理和开机键的GPIO(我假设你用GPIO来做开机键)中断有什么区别。

    2011年9月7日 3:01
    版主
  • 我不清楚你这里说的底层和上层是什么概念。

    据我所知,Touch驱动虽然分成MDD和PDD,但是编译后还是一个标准的stream driver,所以它也是一个一般的由device.exe管的驱动。

    OEM SD Card 驱动虽然是由SDBus调的,但是关于插拔的中断处理应该也是由OEM这边一个独立的thread来处理的。

    所以我看不出这些中断处理和开机键的GPIO(我假设你用GPIO来做开机键)中断有什么区别。

    做了以下实验:

    1、将Touch、SD Card中断处理程序中的Sleep函数替换为Delay函数。则Touch、SD Card都可以调用到中断服务程序。

    2、如果用Touch进入 My Device,无法进入My Device中。或在开始->suspend时,系统无法挂起。必须等待一会才可以。

    3、感觉此时调用系统函数都没有效果。是不是系统服务还没有运行起来?

     

     


    Gavin
    2011年9月7日 4:33
  • 以下是Wince唤醒流程:

    1. OEMPowerOff 重新配置中断为原先的状态并返回。
    2. 内核:
        a. 调用 InitClock 来重新初始化系统计时器。
        b. 以开机通知来开始 Filesys.exe。
        c. 以开机通知来开始 GWES。
        d. 如果之前在使用中,重新初始化 KITL 中断。
    3. 电源管理器以开机通知来调用 FileSystemPowerFunction。
    4. GWES:
        a. 从 RAM 恢复视频内存。
        b. 启动 Windows Manager ( 窗口管理器)。
        c. 设定显示对比度。
        d. 如果需要,显示启动 UI。
        e. 通知 Taskbar ( 任务条) 恢复。
        f. 通知 User Subsystem ( 用户子系统)。
        g. 按需触发应用程序。

     

    在出现这种问题时,是不是在2.c以后的步骤延迟了?


    Gavin
    2011年9月7日 5:15
  • 你前面不是说一段时间内touch和SD card不好用马?

    怎么现在“Touch、SD Card都可以调用到中断服务程序”,而且Touch已经可以操作菜单了(只是进不了Suspend)?

     

    2011年9月7日 5:53
    版主
  • 你前面不是说一段时间内touch和SD card不好用马?

    怎么现在“Touch、SD Card都可以调用到中断服务程序”,而且Touch已经可以操作菜单了(只是进不了Suspend)?

     


    是这样的。

    1、将Touch、SD Card中断处理程序中的Sleep函数替换为Delay函数。则Touch、SD Card都可以调用到中断服务程序。

    2、如果用Touch进入 My Device,无法进入My Device中。或在开始->suspend时,系统无法挂起。必须等待一会才可以。

    Touch可以操作菜单,在调用Suspend时,只执行了一部分。

    点击桌面的My Device,进不了下一个界面。

    一会整理个log发上来。


    Gavin
    2011年9月7日 6:05
  • 条件:唤醒后直接操作 ”开始->挂起“菜单
    ..............................休眠过程开始:唤醒后直接操作 ”开始->挂起“菜单...................................
    PID:00400002 TID:004F0002 OAL:OEMInterruptHandler: irq == IRQ_GPIOXX_2
    PID:00400002 TID:004F0002 +BSPIntrActiveIrq(0x50)
    PID:00400002 TID:004F0002 -BSPIntrActiveIrq(0x50)
    PID:00400002 TID:02D1019A SWP:FrameChanged sent to window 0x70041850 which is not visible
    PID:00400002 TID:0043004E OAL:OEMInterruptHandler: irq == IRQ_GPIOXX_2
    PID:00400002 TID:0043004E +BSPIntrActiveIrq(0x50)
    PID:00400002 TID:0043004E -BSPIntrActiveIrq(0x50)
    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET request to D4
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0004,state = 0xf
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [BKL1]:IPM_ReleaseMinOp
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [BKL1]: MinOP Set/Release Success!
    PID:00400002 TID:016E0006 [LCD]:SA2Video::power_ioctl,3
    PID:00400002 TID:016E0006 [LCD]:SA2Video::set_power_state 4, original state 1
    PID:00400002 TID:016E0006 [LCD]:DispDrvrPowerHandler->LCDSuspend
    PID:00400002 TID:016E0006 [LCD]:LCDSuspend
    PID:00400002 TID:016E0006 [LCD]:qvga->set_power_mode
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0007,state = 0xb
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET to D4
    PID:00400002 TID:0172003E [IPM]: ThreadRun->HandlePmNotification
    PID:00400002 TID:013F003E [IPM] UpdateKernelGlobal: BSP_IPM_D0CS_IDLE override
    PID:00400002 TID:013F003E [IPM] Update Kernel Global dwApprovedLpm=0x1, D0CSIdlesEnabled=1, D1IdlesEnabled=0, D2IdlesEnabled=0
    PID:00400002 TID:013F003E [IPM]:CIPMainThread::ThreadRun() ->IPM_REQUEST_RELEASE_MIN_OP
    PID:00400002 TID:013F003E [IPM] HandleSetMinOp +;  m_dwMinOpTotal = 0x1, requestedOP=0x1
    PID:00400002 TID:013F003E [IPM] Recieved readiness after decided to go to LPM \Windows\zylonite_lcd.dll
    PID:00400002 TID:013F003E [IPM] UpdateKernelGlobal: BSP_IPM_D0CS_IDLE override
    PID:00400002 TID:013F003E [IPM] Update Kernel Global dwApprovedLpm=0x1, D0CSIdlesEnabled=1, D1IdlesEnabled=0, D2IdlesEnabled=0


    ................................休眠过程在这里卡住,等待2分钟左右,从这继续向下执行.............................

    PID:00400002 TID:016E0006 [FFUART]: (+)CZyloniteFFUART::SetDevicePowerState(D3) Current(D0)
    PID:00400002 TID:016E0006 [FFUART]: (+)Power Off.
    PID:00400002 TID:016E0006 [IPM]:IPM_IOControl->IOCTL_POWER_SET...
    PID:00400002 TID:016E0006 [IPM]:IPM_IOControl->IOCTL_POWER_SET Suspend...
    PID:00400002 TID:016E0006 OALIoCtlHalPreSuspend
    PID:00400002 TID:016E0006 FSREG: Flushing registry
    PID:00400002 TID:016E0006 [SMC]:SMC_IOControl:IOCTL_POWER_SET.
    PID:00400002 TID:016E0006 [SMC]:SMC_IOControl:IOCTL_POWER_SET 2.
    PID:00400002 TID:016E0006 SDMemory:HandleIoctlPowerSet, IOCTL_POWER_SET 2
    PID:00400002 TID:016E0006 Powering Off system:
    PID:00400002 TID:016E0006   Calling GWES power proc.
    PID:00400002 TID:016E0006 gcu suspend!
    PID:00400002 TID:016E0006   Calling device manager power proc.
    PID:00400002 TID:016E0006 SDH: +SDH_PowerDown
    PID:00400002 TID:016E0006 [MMC] SDH: +SDH_PowerDown
    PID:00400002 TID:016E0006 [SDHC]:SDDeActiveHardware,id =0x2
    PID:00400002 TID:016E0006 SDH: +SDH_PowerDown
    PID:00400002 TID:016E0006 [MMC] SDH: +SDH_PowerDown
    PID:00400002 TID:016E0006 [SDHC]:SDDeActiveHardware,id =0x1
    PID:00400002 TID:016E0006 [CDC] CDC_PowerDown
    PID:00400002 TID:016E0006 [CDC] Sleep Entered...
    PID:00400002 TID:016E0006 [AC97]:Ac97DeActiveHardware
    PID:00400002 TID:016E0006 BKL_PowerDown().
    PID:00400002 TID:016E0006 IMM_PowerDown...
    PID:00400002 TID:016E0006 IPM_PowerDown...
    PID:00400002 TID:016E0006   Calling OEMPowerOff...
    PID:00400002 TID:016E0006 Enable Internal SRAM Power Domain
    PID:00400002 TID:016E0006 Enable Internal SRAM Clock.
    Save Register Counter 19
    g_SRAM_Start is :0xabb14000
    Finish init sav
    ................................休眠过程结束.............................
    ................................唤醒过程开始.............................
    PID:00400002 TID:016E0006
    -InitDebugSerial
    Resume back from XllpPmEnterSleep
    Wakeup Source 1027, AD3SR 0x1
    PID:00400002 TID:016E0006 Disable Internal SRAM Clock
    PID:00400002 TID:016E0006 Disable Internal SRAM Power Domain
    Return from OEMPowerOff
    PID:00400002 TID:016E0006 Back from OEMPowerOff
    PID:00400002 TID:016E0006   Calling device manager power proc.
    PID:00400002 TID:016E0006 IPM_PowerUp...
    PID:00400002 TID:016E0006 [IPM] CIPMActivePanelStateMachine::IPM_GetOP.
    PID:00400002 TID:016E0006 IMM_PowerUp...
    PID:00400002 TID:016E0006 BKL_PowerUp().
    PID:00400002 TID:016E0006 [CDC] CDC_PowerUp
    PID:00400002 TID:016E0006 [CDC] +++TouchInit()
    PID:00400002 TID:016E0006 [CDC] Wake up!!!
    PID:00400002 TID:016E0006 SDH: +SDH_PowerUp
    PID:00400002 TID:016E0006 [MMC] SDH: +SDH_PoweUp
    PID:00400002 TID:016E0006 SDH: +SDH_PowerUp
    PID:00400002 TID:016E0006 [MMC] SDH: +SDH_PoweUp
    PID:00400002 TID:016E0006   Calling GWES power proc.
    PID:00400002 TID:016E0006 [NKPOS]:  Returning to normally scheduled programming.
    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET request to D0
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0004,state = 0x3
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [BKL1]:IPM_SetMinOp,ipm_client_id = 0x400002
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [IPM]: IPM_RecieveMessageUnnamed.lpMsg=0xc9c4f464, cbDataSize=0xc, qRecieveQueue=0x720043,dwTimeout=0xbb8,
    PID:00400002 TID:0172003E [IPM]: ThreadRun->HandlePmNotification
    PID:00400002 TID:013F003E [IPM] Recieved readiness after decided to go to LPM BKL1:
    PID:00400002 TID:013F003E [IPM] UpdateKernelGlobal: BSP_IPM_D0CS_IDLE override
    PID:00400002 TID:013F003E [IPM] Update Kernel Global dwApprovedLpm=0x1, D0CSIdlesEnabled=1, D1IdlesEnabled=0, D2IdlesEnabled=0
    PID:00400002 TID:013F003E [IPM]:CIPMainThread::ThreadRun() ->IPM_REQUEST_SET_MIN_OP
    PID:00400002 TID:013F003E [IPM] HandleSetMinOp +;  m_dwMinOpTotal = 0x1, requestedOP=0x1
    PID:00400002 TID:016E0006 [IPM]: IPM_RecieveMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [IPM]: IPM_SetMinOp -> IPM_RecieveMessageUnnamed Successr
                                                                                       PID:00400002 TID:016E0006 [BKL1]: MinOP Set/Release Success!
    PID:00400002 TID:016E0006 [LCD]:SA2Video::power_ioctl,0
    PID:00400002 TID:016E0006 [IPM]: IPM_NotifyReadyForProcState,clientID = 0xfafb0007,state = 0x7
    PID:00400002 TID:016E0006 [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:016E0006 [LCD]:SA2Video::set_power_state 1, original state 4
    PID:00400002 TID:016E0006 [LCD]:LCDResume
    PID:00400002 TID:016E0006 [LCD]:qvga->set_power_mode
    PID:00400002 TID:016E0006
    [LCD]:Lcd_Init
    PID:00400002 TID:016E0006
    [LCD]: ----LCDICINIT----
    PID:00400002 TID:016E0006 [BKL-MDD]:IOCTL_POWER_SET to D0
    PID:00400002 TID:016E0006 [FFUART]: (+)CZyloniteFFUART::SetDevicePowerState(D0) Current(D3)
    PID:00400002 TID:016E0006 [FFUART]: (+)Power On
    PID:00400002 TID:016E0006 [IPM]:IPM_IOControl->IOCTL_POWER_SET...
    PID:00400002 TID:016E0006 Back from PowerOffSystem.
    PID:00400002 TID:016E0006 Invalidating all screen bits!!
    PID:00400002 TID:016E0006 [SMC]:SMC_IOControl:IOCTL_POWER_SET.
    PID:00400002 TID:016E0006 [SMC]:SMC_IOControl:IOCTL_POWER_SET 2.
    PID:00400002 TID:016E0006 SDMemory:HandleIoctlPowerSet, IOCTL_POWER_SET 0
    PID:00400002 TID:0172003E [IPM]: ThreadRun->HandlePmNotification
    PID:00400002 TID:013F003E [IPM]: IPM_SendMessageUnnamed->Successed
    PID:00400002 TID:013F003E [IPM] Recieved readiness after decided to go to LPM \Windows\zylonite_lcd.dll
    PID:00400002 TID:05510002 ndisMResetCompleteStage2: Internal reset
    ................................唤醒过程结束,在这里卡住.............................


    Gavin
    2011年9月7日 6:29
  • 条件:唤醒后直接双击 ”My Device“图标
    ..............................休眠过程开始:唤醒后直接双击 ”My Device“图标...................................                                                                  PID:00400002 TID:004F0002 OAL:OEMInterruptHandler: irq == IRQ_GPIOXX_2
    PID:00400002 TID:004F0002 +BSPIntrActiveIrq(0x50)
    PID:00400002 TID:004F0002 -BSPIntrActiveIrq(0x50)
    PID:01CB0026 TID:02CE0032 ChnIms2: SetIMMActiveContext. hWnd=fe100002,bOpen=0,hkl=e0010804
    PID:01CB0026 TID:02CE0032 ChnIms2: SetIMMActiveContext. hWnd=fe110002,bOpen=0,hkl=e0010804
    PID:00400002 TID:00F10042 OAL:OEMInterruptHandler: irq == IRQ_GPIOXX_2
    PID:00400002 TID:00F10042 +BSPIntrActiveIrq(0x50)
    PID:00400002 TID:00F10042 -BSPIntrActiveIrq(0x50)
    PID:00400002 TID:0043004E OAL:OEMInterruptHandler: irq == IRQ_GPIOXX_2
    PID:00400002 TID:0043004E +BSPIntrActiveIrq(0x50)
    PID:00400002 TID:0043004E -BSPIntrActiveIrq(0x50)
    ................................在这里卡住,等待2分钟左右,从这继续向下执行,然后进入”My Device“界面.............................
    PID:02F80032 TID:02FD0032 WPCSHELL: SHRecognizeGesture found WM_LBUTTONUP, dropping out of loop...
    PID:00400002 TID:05650002 OALIoCtlHalGetRandomSeed
    PID:02F80032 TID:05650002 CePerf.dll is absent - performance data will not be recorded
    PID:02F80032 TID:05650002 CePerf.dll is absent - performance data will not be recorded
    PID:02F80032 TID:05650002 Invalid unicode when search Unicode->CharID: 434b
    PID:02F80032 TID:05650002 Invalid unicode when search Unicode->CharID: 434b
    PID:01CB0026 TID:02CE0032 ChnIms2: SetIMMActiveContext. hWnd=fe240002,bOpen=0,hkl=e0010804
    PID:00400002 TID:05650002 SWP:FrameChanged sent to window 0x70045DF0 which is not visible
    PID:01CB0026 TID:02CE0032 ChnIms2: SetIMMActiveContext. hWnd=fe360002,bOpen=0,hkl=e0010804
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 REGEXT: +CHandleArray::Add
    PID:02F80032 TID:05650002 REGEXT: -CHandleArray::Add
    PID:02F80032 TID:05650002 Listview using cleartype
    PID:02F80032 TID:02B80122 REGEXT: CHandleArray::ProcessNotifications: WaitForMultipleObjects fired on the reset object
    PID:02F80032 TID:02B80122 REGEXT: CHandleArray::ProcessNotifications: Entering WaitForMultipleObjects with 3 wait objects and a timeout of 0xffffffff
    PID:02F80032 TID:05650002 02f80032
    PID:02F80032 TID:05650002 [OAL]:OEMInterruptHandler: SYSINTR_IPMIPROF,SUCCESS !
    .05650002> PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:01CB0026 TID:02CE0032 ChnIms2: SetIMMActiveContext. hWnd=fe240002,bOpen=0,hkl=e0010804
    PID:02F80032 TID:05650002 02f80032.05650002>
    PID:02F80032 TID:05650002 Cairole:
    PID:02F80032 TID:05650002 CoInitializeEx Attempt to change threadmodel
    PID:00400002 TID:05650002   -RDR:CreateParsedPath, ret 2
    PID:00400002 TID:03D5000E [OAL]:OEMInterruptHandler: SYSINTR_IPMIPROF,SUCCESS !
    PID:00400002 TID:013F003E     OALIOCtlIPM:  next XL=16, HSS=1
    PID:00400002 TID:013F003E OALIOCtlIPM:  Received SET_OP
    PID:00400002 TID:013F003E     OALIOCtlIPM:  next XL=16, HSS=1
    PID:00400002 TID:013F003E +IPM_FCS_PREAMBLE
    PID:00400002 TID:013F003E +SlowerPreamble
    PID:00400002 TID:013F003E -IPM_FCS_PREAMBLE
    PID:00400002 TID:013F003E [IPM]: HandleFCS->HandleIM
    PID:00400002 TID:013F003E +IPM_FCS_POSTFIX
    PID:00400002 TID:013F003E +SlowerPostfix
    PID:00400002 TID:013F003E -IPM_FCS_POSTFIX
    PID:00400002 TID:0043004E [CDC] Sleep Entered...
    PID:00400002 TID:0043004E [OAL]:OEMInterruptHandler: SYSINTR_IPMIPROF,SUCCESS !
    PID:00400002 TID:013F003E     OALIOCtlIPM:  next XL=16, HSS=0
    PID:00400002 TID:013F003E OALIOCtlIPM:  Received SET_OP
    PID:00400002 TID:013F003E     OALIOCtlIPM:  next XL=16, HSS=0
    PID:00400002 TID:013F003E +IPM_FCS_PREAMBLE
    PID:00400002 TID:013F003E +SlowerPreamble
    PID:00400002 TID:013F003E -IPM_FCS_PREAMBLE
    PID:00400002 TID:013F003E [IPM]: HandleFCS->HandleIM
    PID:00400002 TID:013F003E +IPM_FCS_POSTFIX
    PID:00400002 TID:013F003E +SlowerPostfix
    PID:00400002 TID:013F003E -IPM_FCS_POSTFIX
    PID:00400002 TID:0172003E [IPM]: ThreadRun->HandlePmNotification
    Gavin
    2011年9月7日 6:37
  • PID:03A90012 TID:03980012 CePerf.dll is absent - performance data will not be recorded
    PID:00400002 TID:03A3000E CePerf.dll is absent - performance data will not be recorded

     

    在唤醒后,双击My Device时,会出现以上两行信息。


    Gavin
    2011年9月7日 6:50
  • 你开了KITL了对吧?先关掉它吧,然后用release build坐一下试试看 然后问一下,那个IPM到底是什么东西?
    2011年9月7日 7:18
    版主
  • 你开了KITL了对吧?先关掉它吧,然后用release build坐一下试试看 然后问一下,那个IPM到底是什么东西?
    2011年9月7日 7:18
    版主
  • 你能不能从catalog或者直接从.bib文件中把不必要的驱动程序和其他module都拿掉,最好IPM也拿掉。然后用简化过的版本来测试和分析。

    2011年9月7日 7:23
    版主
  • 你开了KITL了对吧?先关掉它吧,然后用release build坐一下试试看 然后问一下,那个IPM到底是什么东西?

    1、KITL
    KITL已经关了。

    set BSP_NOUSBKITL_RNDIS=1

    set IMGNOKITL=1

    set BSP_NOUSBKITL=1

    同时在工程中,也没选KITL。

    2、Release

    release也build了,运行效果与check版本一样。

    3、IPM是PXA的BSP中的电源管理驱动。

    4、在wince唤醒过程中,一个步骤是电源管理驱动发出系统状态变迁的消息通知。请问这个通知包含向系统发送的通知么?还是电源管理驱动只从系统得到状态变化的通知?

     


    Gavin
    2011年9月7日 7:24
  • 你能不能从catalog或者直接从.bib文件中把不必要的驱动程序和其他module都拿掉,最好IPM也拿掉。然后用简化过的版本来测试和分析。

    做过这样的测试,只保留了LCD、Backlight,依然不行。

    Gavin
    2011年9月7日 7:26
  • 你能不能从catalog或者直接从.bib文件中把不必要的驱动程序和其他module都拿掉,最好IPM也拿掉。然后用简化过的版本来测试和分析。

    做过这样的测试,只保留了LCD、Backlight,依然不行。

    Gavin

    还保留了Touch.
    Gavin
    2011年9月7日 7:26
  • 系统power状态改变时一般WinCE的power management module会通过IOCTL_POWER_SET Io Control code通知每个驱动程序。也就是说一般驱动程序是处于被动接受状态。

    当然也有主动通知的,比如,以前处理开关键的时候,用GPIO,一旦键被按下,相应的驱动就通过SetSystemPowerState API将状态告诉Power management module。

    至于这个IPM属于哪一种,要看它具体的code了。

    2011年9月7日 7:44
    版主
  • PID:03A90012 TID:03980012 CePerf.dll is absent - performance data will not be recorded
    PID:00400002 TID:03A3000E CePerf.dll is absent - performance data will not be recorded

     

    在唤醒后,双击My Device时,会出现以上两行信息。


    Gavin

    在休眠前,双击My Device也会出现上述错误。
    Gavin
    2011年9月7日 9:08
  • 估计是你在Property里面没选CePerf,参考这篇文章http://msdn.microsoft.com/en-us/library/ee482136.aspx
    2011年9月8日 4:31
    版主
  • 估计是你在Property里面没选CePerf,参考这篇文章http://msdn.microsoft.com/en-us/library/ee482136.aspx

    我怎么打不开这个网页?
    Gavin
    2011年9月8日 4:40
  • OS Design Property Pages: Build Options (Windows Embedded Compact 7)

    Windows Embedded Compact 7.0
     
    7/24/2011

     

     

    This category enables you to choose the build options that you want to set for the active OS design. The options that are available will depend on the type of OS you have designed.

    For more information about the dialog box, see OS Design Property Pages Dialog Box, and the Visual Studio documentation.

    Buffer tracked events in RAM (IMGOSCAPTURE=1)

    Select to buffer events tracked by OSCapture.exe in RAM.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Enable Eboot Space in Memory (IMGEBOOT=1)

    Select to reserve memory space in the Config.bib file.
    This allows the boot loader to save data that the OS can read at boot time.

    Enable Event Tracking during Boot (IMGCELOGENABLE=1)

    Select to start the event-tracking subsystem.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Enable hardware-assisted debugging support (IMGHDSTUB=1)

    Select to support hardware-assisted debugging.
    This variable is automatically enabled if you define the Watson sysgen variables to support Windows Error Reporting.

    Enable Kernel Debugger (no IMGNODEBUGGER=1)

    Select before building the run-time image to allow the debugger to connect and pass debugging information from the target device to the host device.
    When Enable Kernel Debugger is selected, IMGNODEBUGGER is 0.
    When cleared, IMGNODEBUGGER is 1.

    Enable KITL (no IMGNOKITL=1)

    Select to enable KITL and to allow communication between the development computer and the device.

    Enable Profiling (IMGPROFILER=1)

    Select to enable kernel profiling in the run-time image.

    In Windows Embedded Compact, this option is no longer required if you are using Monte Carlo or system call profiling in combination with CeLog.

    Select this option if you want to perform instrumented kernel (KCall) profiling, stand-alone profiling without CeLog, or to record TLB miss measurement in CeLog on MIPS architecture.

    Enable Ship Build (WINCESHIP=1)

    Select to set the environment variable WINCESHIP to 1, which defines the compile time flag -DSHIP_BUILD.
    This flag can be used to conditionally compile code.
    If set, the OS does not output debug messages. If not set, the OS provides verbose debug messages to aid debugging.
    This check box is displayed only in a release configuration, and is hidden in debug and checked configurations.

    Flush tracked events to Release Directory (IMGAUTOFLUSH=1)

    Select to flush events to the release directory.
    Selecting this also turns on event tracking.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Include CEPerf

    Select to include the module CEPerf.dll, which supports performance tests, in the run-time image.

    Minimize kernel size by omitting user-mode code

    Select to omit user-mode code during the build process and minimize the kernel size. When this option is set, only files and modules that can run in kernel mode are included in the run-time image.

     

    Optimize run-time image size and speed

    Specifies whether the compiler generates smaller and faster run-time images. Use this option to override the default optimization of the build configuration for your OS design.

    By default, optimization is disabled when the configuration is Debug, and optimization is enabled when the configuration is Retail, Ship, or Checked. When optimization is disabled, this might assist with stepping through source code in the debugger.

    Write run-time image to flash memory (IMGFLASH=1)

    Select to allow the run-time image to be written to flash memory after download.

    2011年9月8日 4:58
    版主
  • OS Design Property Pages: Build Options (Windows Embedded Compact 7)

    Windows Embedded Compact 7.0
     
    7/24/2011

     

     

    This category enables you to choose the build options that you want to set for the active OS design. The options that are available will depend on the type of OS you have designed.

    For more information about the dialog box, see OS Design Property Pages Dialog Box, and the Visual Studio documentation.

    Buffer tracked events in RAM (IMGOSCAPTURE=1)

    Select to buffer events tracked by OSCapture.exe in RAM.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Enable Eboot Space in Memory (IMGEBOOT=1)

    Select to reserve memory space in the Config.bib file.
    This allows the boot loader to save data that the OS can read at boot time.

    Enable Event Tracking during Boot (IMGCELOGENABLE=1)

    Select to start the event-tracking subsystem.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Enable hardware-assisted debugging support (IMGHDSTUB=1)

    Select to support hardware-assisted debugging.
    This variable is automatically enabled if you define the Watson sysgen variables to support Windows Error Reporting.

    Enable Kernel Debugger (no IMGNODEBUGGER=1)

    Select before building the run-time image to allow the debugger to connect and pass debugging information from the target device to the host device.
    When Enable Kernel Debugger is selected, IMGNODEBUGGER is 0.
    When cleared, IMGNODEBUGGER is 1.

    Enable KITL (no IMGNOKITL=1)

    Select to enable KITL and to allow communication between the development computer and the device.

    Enable Profiling (IMGPROFILER=1)

    Select to enable kernel profiling in the run-time image.

    In Windows Embedded Compact, this option is no longer required if you are using Monte Carlo or system call profiling in combination with CeLog.

    Select this option if you want to perform instrumented kernel (KCall) profiling, stand-alone profiling without CeLog, or to record TLB miss measurement in CeLog on MIPS architecture.

    Enable Ship Build (WINCESHIP=1)

    Select to set the environment variable WINCESHIP to 1, which defines the compile time flag -DSHIP_BUILD.
    This flag can be used to conditionally compile code.
    If set, the OS does not output debug messages. If not set, the OS provides verbose debug messages to aid debugging.
    This check box is displayed only in a release configuration, and is hidden in debug and checked configurations.

    Flush tracked events to Release Directory (IMGAUTOFLUSH=1)

    Select to flush events to the release directory.
    Selecting this also turns on event tracking.

    Ee482136.note(en-us,WinEmbedded.70).gifNote:
    Do not include CeLog on a shipping device because the logging that CeLog performs can reduce system performance. Also, omitting CeLog reduces the attack surface through which a malicious user could try to compromise the system.
    Include CEPerf

    Select to include the module CEPerf.dll, which supports performance tests, in the run-time image.

    Minimize kernel size by omitting user-mode code

    Select to omit user-mode code during the build process and minimize the kernel size. When this option is set, only files and modules that can run in kernel mode are included in the run-time image.

     

    Optimize run-time image size and speed

    Specifies whether the compiler generates smaller and faster run-time images. Use this option to override the default optimization of the build configuration for your OS design.

    By default, optimization is disabled when the configuration is Debug, and optimization is enabled when the configuration is Retail, Ship, or Checked. When optimization is disabled, this might assist with stepping through source code in the debugger.

    Write run-time image to flash memory (IMGFLASH=1)

    Select to allow the run-time image to be written to flash memory after download.


    打开了,谢谢。

    现在问题表现为:唤醒后,在进入My Device或挂起时,需要等待一段时间2-5分钟不等,从log上分析,好像是在等系统执行某些操作,但是没有log信息输出,无法确定系统当时正在执行哪些操作。


    Gavin
    2011年9月8日 5:14
  • 在唤醒后,按 开始->设置->控制面板后,会报如下错误:

    PID:05310002 TID:05330002 CONTROL resize: LV=(1,29,321,455)
    PID:05310002 TID:05330002 - Searching For CPLs -
    PID:05310002 TID:05330002 Found RAM CPL file='\Windows\cplmain.cpl'
    PID:05310002 TID:05330002 Found applet='PC Connection' index=1 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=1156
    PID:05310002 TID:05330002 Found applet='Dialing' index=2 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=1734
    PID:05310002 TID:05330002 Found applet='Keyboard' index=3 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=2312
    PID:05310002 TID:05330002 Found applet='Password' index=4 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=2890
    PID:05310002 TID:05330002 Found applet='Owner' index=5 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=3468
    PID:05310002 TID:05330002 Found applet='Power' index=6 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=4046
    PID:05310002 TID:05330002 Found applet='System' index=7 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=4624
    PID:05310002 TID:05330002 Found applet='Display' index=8 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=5202
    PID:05310002 TID:05330002 Found applet='Mouse' index=9 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 CPL: Wanted Applet 9, but component (CPL_Stylus) not present
    PID:05310002 TID:05330002 CPL: Failed CPL_NEWINQUIRE for DLL=\Windows\cplmain.cpl applet 9
    PID:05310002 TID:05330002 CPL: Wanted Applet 10, but component (CPL_Sounds) not present
    PID:05310002 TID:05330002 CPL: Failed CPL_NEWINQUIRE for DLL=\Windows\cplmain.cpl applet 10
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=5780
    PID:05310002 TID:05330002 Found applet='Input Panel' index=10 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=6358
    PID:05310002 TID:05330002 Found applet='Remove Programs' index=11 dllpath=\Windows\cplmain.cpl
    PID:00400002 TID:05330002 Grow Gdi handle table from 80 to 96 for the object at 0xc4467b90
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=6936
    PID:05310002 TID:05330002 Found applet='Date/Time' index=12 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=7514
    PID:05310002 TID:05330002 Found applet='Certificates' index=13 dllpath=\Windows\cplmain.cpl
    PID:05310002 TID:05330002 CPL: Wanted Applet 15, but component (CPL_Accessib) not present
    PID:05310002 TID:05330002 CPL: Failed CPL_NEWINQUIRE for DLL=\Windows\cplmain.cpl applet 15
    PID:05310002 TID:05330002 Found RAM CPL file='\Windows\intlp.cpl'
    PID:05310002 TID:05330002 CPL_NEWINQUIRE.    Tab # = 0
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=8092
    PID:05310002 TID:05330002 Found applet='Regional Settings' index=14 dllpath=\Windows\intlp.cpl
    PID:05310002 TID:05330002 Found RAM CPL file='\Windows\connpnl.cpl'
    PID:05310002 TID:05330002 In GetMoreMem(): LocalSize=9248 needed=8670
    PID:05310002 TID:05330002 Found applet='Network and Dial-up Connections' index=15 dllpath=\Windows\connpnl.cpl
    PID:05310002 TID:05330002 Interlocked operation in progress, restart (pc = 0xffffcbe4)
    PID:05310002 TID:05330002 Interlocked operation in progress, restart (pc = 0xffffcbe4)
    PID:05310002 TID:05330002 Interlocked operation in progress, restart (pc = 0xffffcbc4)
    PID:05310002 TID:05330002 Invalid unicode when search Unicode->CharID: 434b
    PID:05310002 TID:05330002 Invalid unicode when search Unicode->CharID: 434b
    PID:05310002 TID:05330002 Interlocked operation in progress, restart (pc = 0xffffcbc4)
    PID:05310002 TID:05330002 Interlocked operation in progress, restart (pc = 0xffffcbe4)
    PID:016D000E TID:03940032 ChnIms2: SetIMMActiveContext. hWnd=fe270002,bOpen=0,hkl=e0010804
    PID:016D000E TID:03940032 ChnIms2: SetIMMActiveContext. hWnd=fe2b0002,bOpen=0,hkl=e0010804
    PID:05310002 TID:05330002 Leaving CreateLV. Added 15 items

    这条信息CPL: Failed CPL_NEWINQUIRE for DLL=\Windows\cplmain.cpl ,是什么原因?


    Gavin
    2011年9月8日 10:35