我的串口代码有问题。
我只想:
opencomm();
send();
closecomm(); ClearCommError() (inside recv())在comstat.cbInQue中返回的数量与发送的相同。
所以,如果sizeof (sendbuff)是100,我在comstat.cbInQue中得到100。
使用ReadFile读取一个字节后,comstat.cbInQue会减少(当然,在随后的ClearCommError()之后)。
读取的值不是所写的值。没有连接到端口的设备。
最奇怪的是,--这段代码过去用于工作,但现在不再工作了。
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
}
}发布于 2013-04-20 09:05:13
是有线电视。没有适当的保护和太长的时间。
https://stackoverflow.com/questions/16118096
复制相似问题