werna
驱动牛犊
驱动牛犊
  • 注册日期2007-10-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望105点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
阅读:1612回复:6

关于ce6.0插拔存储设备盘符消逝的问题

楼主#
更多 发布于:2008-03-19 10:57
有没有做CE6.0朋友..我发现,SD 拔掉的时候,Device里盘符总是延迟4秒钟左右才消逝(5.0可以很快消逝),USB HOST 外接u盘被拔掉时也是这样........
有没有人了解这个情况?
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-03-19 16:20
maoRe:关于ce6.0插拔存储设备盘符消逝的问题
引用楼主werna于2008-03-19 10:57发表的 关于ce6.0插拔存储设备盘符消逝的问题 :
有没有做CE6.0朋友..我发现,SD 拔掉的时候,Device里盘符总是延迟4秒钟左右才消逝(5.0可以很快消逝),USB HOST 外接u盘被拔掉时也是这样........
有没有人了解这个情况?

我两个都用过,都要4-5秒才消失。
而且5.0和6.0用的是同样的架构,
不知道你5.0用的架构和6.0是否一样?
做一个出色的程序员!
werna
驱动牛犊
驱动牛犊
  • 注册日期2007-10-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望105点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-03-25 09:36
应该是一个样架构.,不过我手上有一个现成的5.0的方案..不存在这样的问题,不知道你说的5.0也 存在这个问题是怎么回事哦,测试人员拿这个说事啊..
zhuxiaofeng
驱动小牛
驱动小牛
  • 注册日期2007-04-06
  • 最后登录2010-04-15
  • 粉丝0
  • 关注0
  • 积分1013分
  • 威望243点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-03-25 11:02
这个好像是正常的,我不知道为啥。如果用微软的架构卸载文件系统比较慢。

如果你5.0不是用微软的架构的话,那就会很快。。

而6.0用的是微软的架构就会消失较慢。。可以确认一下架构是否一样??

我的5.0也需要拔掉后也需要4---5秒中才能消失。
做一个出色的程序员!
hanson_csu
驱动牛犊
驱动牛犊
  • 注册日期2008-01-22
  • 最后登录2009-10-16
  • 粉丝0
  • 关注0
  • 积分571分
  • 威望59点
  • 贡献值0点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-03-25 22:44
你可以试着在ProcessCardRemoval()函数:

void ProcessCardRemoval( void *pContext )
{
    PSDH_HARDWARE_CONTEXT pHCDevice = (PSDH_HARDWARE_CONTEXT)pContext;
    PSD_BUS_REQUEST pRequest;       // current request

    if( pHCDevice->DevicePresent )
    {
        DbgPrintZo(SDH_INTERRUPT_ZONE,
            (TEXT("CardDetectIstThread: Card Removal Detected! \n")));
            // mark that the card has been removed
        pHCDevice->DevicePresent = FALSE;

        
            // indicate the slot change
        SDHCDIndicateSlotStateChange(pHCDevice->pHCContext,
                                        0,
                                        DeviceEjected);

            // shut off clock first
        SDClockOff(pHCDevice);

        // Complete any pending request
        if((pRequest = pHCDevice->pCurrentRequest) != NULL)
        {
            ALL_INTERRUPTS_OFF(pHCDevice);

            // if we were doing a DMA transfer, stop the DMA and reset the interrupt status
            if( pHCDevice->fDMATransfer )
            {
                pHCDevice->fDMATransferCancelled = TRUE;
                pHCDevice->pDMARegisters->dcsr[pHCDevice->dwDmaChannel] &=  !(DCSR_RUN | DCSR_STOPIRQEN);

                if( !(pHCDevice->fDMAUsingDriverBuffer) )
                { // we use client provided DMA buffer.  Unlock the memory pages where it is located.
                    if( pHCDevice->pClientBuffer )
                    {
                        UnlockPages( pHCDevice->pClientBuffer, pHCDevice->dwClientBufferSize );
                        pHCDevice->pClientBuffer = NULL;
                        pHCDevice->dwClientBufferSize = 0;
                    }
                }

                #ifdef DEBUG
                    pHCDevice->fDMATransferInProgress = FALSE;
                #endif

                InterruptDone(pHCDevice->dwDmaSysIntr);
            }

            IndicateBusRequestComplete(pHCDevice->pHCContext,
                                            pRequest ,
                                            SD_API_STATUS_DEVICE_REMOVED);
        }

            // turn the Multimedia Card power off
        MMCPowerControl( FALSE );
    }

    RemoveDirectory(_T("SDMMC Disk"));  // deletes an existing empty directory
}

添加RemoveDirectory(_T("SDMMC Disk"));  // deletes an existing empty directory

这个应该可以解决你的问题。
http://hanson.cnblogs.com/
werna
驱动牛犊
驱动牛犊
  • 注册日期2007-10-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望105点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-04-02 13:43
楼上的兄弟,你的RemoveDirectory能成功吗?
我的返回"拒绝访问".....
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-04-02 22:44
在reginit里面找pnpunloaddelay,把那个注册表项的值改小就行.
学海无涯
游客

返回顶部