[英]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.