私は、WindowsのCOMポートにアクセスするためのいくつかの愚かなコード(最も関連の機能のほんの一部の擬似コード)を持つ:シリアルポートからのデータの読み出しが行われへのアクセスCOMポート
// 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);
を私の特定のケースでは
WriteFile()
と書い
ReadFile()
で、デバイスはセリアとして接続したUSBガジェットです速度設定やその他のことが本当に重要ではない場所では、
このコードは、8.1などのすべてのWindowsの亜種で問題なく動作していますが、Windows 10では、デバイスとの通信ができないという報告があります。残念ながら、テスト用のWin10バージョンはありません。
私の質問:このような動作やシリアルポート通信の変更が必要なWindows 10のいくつかの問題/重要な変更点がありますか?
ありがとうございます!
****** 更新 ************************************* *****************************
これと同様に、関数SetCommState()はエラー87(ERROR_INVALID_PARAMETER)で失敗します。 )。 GetCommState()から受け取ったデータを使用するか、またはDCB構造を完全に初期化して設定すると、自分のパラメータを設定するかどうかは関係ありません。だから...これはWin 10のSetCommState()の既知のバグですか?
ちょうど注意してください:5つのケースのうちの4つで失敗するので、系統的なエラーではなくランダムなものです!
私はこの質問をdownvoteするためにどのような理由があるのかわかりません...しかし、これらの人々はほとんどの場合、コメントをしないために十分なgutlessです驚くことではない... – Elmi