情况是这样的,我做一个控制系统,根据脉冲定位来做判断控制硬件,用单片机来数脉冲,每数10个通过串口告诉主机,主机记脉冲来处理已知:2个毫秒约10个脉冲

解决方案 »

  1.   

    毫秒级应该还好,150ms挺好应付的,不过2ms在用户态下略微有点。。
      

  2.   

    // 在windows系统下处理2ms一次的中断?
    // 估计会多次通讯合并为一次
      

  3.   

    2ms做不到吧,windows的计时器55ms才会触发。http://www.aogosoft.com/bbs/view.asp?id=74217
      

  4.   

    不是中断了,2MS只是一次通信,我用来数脉冲的,拿过来只作计数处理,[code=Assembly]UINT CommProc(LPVOID pParam)
    {
    OVERLAPPED os;
    DWORD dwMask, dwTrans;
    COMSTAT ComStat;
    DWORD dwErrorFlags;
    memset(&os, 0, sizeof(OVERLAPPED));
    os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
    if(os.hEvent==NULL)
    {
    AfxMessageBox("Can't create event object!");
    return (UINT)-1;
    }
    while(m_bRun)
    {
    ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
    if(ComStat.cbInQue)
    {
    //无限等待WM_COMMNOTIFY消息被处理完
    WaitForSingleObject(m_hHandle,INFINITE);
    ResetEvent(m_hHandle);
    //接收数据
    continue;
    }
    dwMask=0;
    if(!WaitCommEvent(m_hCom,&dwMask,&os)) //重叠操作
    {
    if(GetLastError()==ERROR_IO_PENDING)
    // 无限等待重叠操作结果
    GetOverlappedResult(m_hCom,&os,&dwTrans,TRUE);
    else
    {
    CloseHandle(os.hEvent);
    return (UINT)-1;
    }
    }
    }
    CloseHandle(os.hEvent);
    return 0;
    }[/code]帮我优化,现在做不到,要加延时