首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串口,WriteFile影响ReadFile

串口,WriteFile影响ReadFile
EN

Stack Overflow用户
提问于 2013-04-20 07:59:32
回答 1查看 1.2K关注 0票数 2

我的串口代码有问题。

我只想:

代码语言:javascript
复制
opencomm(); 
send(); 
closecomm(); 

ClearCommError() (inside recv())comstat.cbInQue中返回的数量与发送的相同。

所以,如果sizeof (sendbuff)是100,我在comstat.cbInQue中得到100。

使用ReadFile读取一个字节后,comstat.cbInQue会减少(当然,在随后的ClearCommError()之后)。

读取的值不是所写的值。没有连接到端口的设备。

最奇怪的是,--这段代码过去用于工作,但现在不再工作了。

代码语言:javascript
复制
WORD sendbuff[128];
static HANDLE hComm; 

static void opencomm (void) 
{ 
    static COMMTIMEOUTS timeouts = {0,0,0,0,0}; 

    static DCB dcb = { 
        sizeof (DCB),   //   DCBlength 
        115200, // * BaudRate 
        1,      //   fBinary 
        0,      // * fParity 
        0,      //   fOutxCtsFlow 
        0,      //   fOutxDsrFlow 
        0,      //   fDtrControl 
        0,      //   fDsrSensitivity 
        1,      //   fTXContinueOnXoff 
        0,      //   fOutX 
        0,      //   fInX 
        0,      //   fErrorChar 
        0,      //   fNull 
        0,      //   fRtsControl 
        0,      //   fAbortOnError 
        0,      //   fDummy2 
        0,      //   wReserved 
        8*k,    //   XonLim 
        2*k,    //   XoffLim 
        8,      // * ByteSize 
        0,      // * Parity 
        0,      // * StopBits 
        0,      //   XonChar 
        1,      //   XoffChar 
        0,      //   ErrorChar 
        0,      //   EofChar 
        0,      //   EvtChar 
        0       //   wReserved1 
    }; 

        hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
        if (hComm != INVALID_HANDLE_VALUE) { 
            SetupComm(hComm, 16*k, 16*k); 
            SetCommState(hComm, &dcb); 
            SetCommTimeouts(hComm, &timeouts); 
        } 
} 

static void closecomm (void) 
{ 
        CloseHandle(hComm); 
} 

static BYTE recv (void) 
{ 
    BYTE text; 
    DWORD temp; 

    COMSTAT comstat; 

        while (1) { 
            ClearCommError(hComm, &temp, &comstat); 
            if (comstat.cbInQue != 0) break; 

            Sleep(1); 
        } 

        ReadFile(hComm, &text, 1, &temp, NULL); 

        return text; 
} 

static void send (void) 
{ 
    DWORD temp; 

        // send to other comp 
        WriteFile(hComm, sendbuff, sizeof (sendbuff), &temp, NULL); 

        // check other comp done 
        if (recv() != 0xAA) { 
            Beep(1000, 100); 
            quit(); // comm error 
        } 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-20 09:05:13

是有线电视。没有适当的保护和太长的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16118096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档