我有一些愚蠢的代碼來訪問Windows COM端口(只是最相關的功能的一些僞代碼):訪問COM端口與Windows 10
// open device:
COMMTIMEOUTS timeouts;
DCB ComSettings;
memset(&ComSettings,0,sizeof(ComSettings));
ComSettings.DCBlength=sizeof(DCB);
*fd=CreateFile(serialParams>port,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
GetCommState(*fd,&ComSettings);
ComSettings.BaudRate=9600;
ComSettings.ByteSize=8;
ComSettings.Parity=NOPARITY;
ComSettings.fParity=0;
ComSettings.StopBits=ONESTOPBIT;
ComSettings.fOutX=FALSE;
ComSettings.fInX=FALSE;
ComSettings.fBinary=TRUE;
ComSettings.fDtrControl=DTR_CONTROL_DISABLE;
ComSettings.fRtsControl=RTS_CONTROL_DISABLE;
ComSettings.fAbortOnError=FALSE;
SetCommState(*fd,&ComSettings);
timeouts.ReadIntervalTimeout =MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier =0;
timeouts.ReadTotalTimeoutConstant =0;
timeouts.WriteTotalTimeoutMultiplier=0;
timeouts.WriteTotalTimeoutConstant =250;
SetCommTimeouts(*fd, &timeouts);
從串口數據的讀取完成與
ReadFile()
與
WriteFile()
寫在我的特殊情況下,設備是連接作爲一個詩里亞USB小工具l接口和速度設置和其他事情並不重要。
此代碼與所有Windows版本(包括8.1)一起工作正常,但對於Windows 10,某些用戶報告與設備沒有可能的通信。不幸的是,我沒有相關的Win10版本進行測試。
所以我的問題:是否有一些問題/在Windows 10中可能會導致此類行爲或需要在串行端口通信中的一些變化的重要更改?
謝謝!
****** 更新 ************************************* *****************************
正如更新到此:函數SetCommState()失敗,出現錯誤87(ERROR_INVALID_PARAMETER )。如果我使用從GetCommState()接收的數據或者我完全初始化並配置了DCB結構,那麼設置自己的參數並不重要。所以......這是Win 10的SetCommState()中的一個已知錯誤?
只是要注意:它只在5個案例中的4個失敗,所以它不是一個系統性錯誤,而是一個隨機錯誤!
我不知道可能存在什麼理由downvote這個問題...但並不奇怪,這些人是在大多數情況下無膽夠不給予任何評論...... – Elmi