我正在尝试在Windows中设置uart /串行端口。我所连接的设备将向我发送10个字符,然后我需要解析并以30个字符作为响应。我需要尝试在2毫秒内做出响应。
我计划以同步方式使用CreateFile。
我打算使用以下电话
SetCommMask (hPort, EV_RXCHAR | EV_ERR); //receive character event
WaitCommEvent (hPort, &dwCommModemStatus, 0); //wait for character
答案 0 :(得分:0)
答案是不使用SetCommMask和WaitCommEvent。
我可以使用SetCommTimeouts,请求10个字节并将ReadTotalTimeoutConstant设置为x毫秒,这样调用不会永远阻塞。
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_commtimeouts
if (!::GetCommTimeouts(m_hCommPort, &timeouts))
std::cout << "error" << std::endl;
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 5000;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 0;
if (!::SetCommTimeouts(m_hCommPort, &timeouts))
std::cout << "error" << std::endl;
BYTE Byte;
DWORD dwBytesTransferred;
DWORD dwCommModemStatus;
ReadFile(m_hCommPort, &Byte, 1, &dwBytesTransferred, 0); //read 1