[英]Win32 C++ writing to serial freezes the program after a while
我添加了一个串行端口写入我的代码,现在它在十分之几的迭代后冻结了。 几分钟就可以正常工作。 如果我去掉串口相关的线,它会一直运行的很流畅。 我正在使用 Visualstudio。 谁能发现问题?
int main() {
HANDLE hSerial;
DCB dcbSerialParams = { 0 };
// Open the serial port
hSerial = CreateFile(L"COM1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hSerial == INVALID_HANDLE_VALUE) {
std::cout << "Error opening serial port" << std::endl;
return 1;
}
// Set the serial port parameters
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (GetCommState(hSerial, &dcbSerialParams) == 0) {
std::cout << "Error getting serial port state" << std::endl;
CloseHandle(hSerial);
return 1;
}
dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (SetCommState(hSerial, &dcbSerialParams) == 0) {
std::cout << "Error setting serial port state" << std::endl;
CloseHandle(hSerial);
return 1;
}
// Send the serial message
DWORD dwBytesWritten;
char message[] = "c";
WriteFile(hSerial, message, sizeof(message) - 1, &dwBytesWritten, NULL);
while (stop == 0) {
WriteFile(hSerial, "x", sizeof(message) - 1, &dwBytesWritten, NULL);
int i = 0;
while (i < 7) {
i++;
//some code that works fine without serial port writings
}
WriteFile(hSerial, "y", sizeof(message) - 1, &dwBytesWritten, NULL);
i = 0;
while (i < 7) {
i++;
//some code that works fine without serial port writings
}
}
}
return 0;
}
我已使代码尽可能简单。 它仍然有一些严重的问题。
可能您会尝试在第一次调用未完成之前编写; 缓冲区可能已满,检查 PurgeComm function。也尝试实现一个事件序列。 (等待通讯事件)
你在读序列另一边的值吗? 我知道,例如,在 Arduino 之类的设备上很常见的许多更便宜的山寨 FTDI USB 串行芯片上,它们有一个小的 (4kB) 缓冲区,如果缓冲区已满,它们将简单地阻止调用。
如果阻塞本身是您最大的问题,要考虑的另一件事可能是检查CreateFile中的FILE_FLAG_OVERLAPPED
标志。 它不会解决通信中断的问题,但如果您最关心的只是在通信准备就绪之前不阻止程序的其他部分,那可能是一个选择。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.