2017-03-21 29 views
0

comポートから読み書きしようとしています。 私がComポートを開くとき、私はそれを重ならないようにします。 すべて正常に動作しますが、0xFFバイトを読み取ると、EOFのように見え、読み取りが終了します。 重複していない読み取り0xFFを作成できますか?ComポートC++で読み取る0xFF

はここに私のコードです:あなたのcharが署名されているようです

//Opening the com port:

hComm = CreateFile(s.c_str(), // COM PORT GENERIC_READ | GENERIC_WRITE, // 0, // exclusive access NULL, // no security OPEN_EXISTING, // must be a port 0 , // async i/o NULL); // //Port init: void initPort(int baud) { uart_baud = baud; DCB dcb; dcb.DCBlength = sizeof(DCB); GetCommState(hComm, &dcb); // read current config dcb.BaudRate = baud; dcb.ByteSize = 8; dcb.StopBits = ONESTOPBIT; dcb.Parity = NOPARITY; dcb.fParity = FALSE; SetCommState(hComm, &dcb); } //Reading:(PS: private: char rx_packet[1024]; int rx_size;) int readByte(int timeout) { COMMTIMEOUTS CommTimeOuts; CommTimeOuts.ReadIntervalTimeout = 1; CommTimeOuts.ReadTotalTimeoutMultiplier = timeout; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 0; SetCommTimeouts(hComm, &CommTimeOuts); char byte; DWORD bytes = 0; if (ReadFile(hComm, &byte, 1, &bytes, NULL)) { return bytes == 1 ? byte : -1; } return -1; } void readPacket(void) { int data_read; bool first_read = true; rx_size = 0; DWORD dwEventMask; DWORD ERR = 0; if (!SetCommMask(hComm, EV_RXCHAR)) return; if (!WaitCommEvent(hComm, &dwEventMask, NULL)) return; while (rx_size < MAX_PACKET_SIZE) { data_read = readByte(first_read ? 200 : 50); first_read = false; if (data_read == -1)return; rx_packet[rx_size] = (char)data_read; rx_size++; } } //Writing port: bool writeByte(char byte) { DWORD bytes = 0; WriteFile(hComm, &byte, 1, &bytes, NULL); return bytes == 1 ? true : false; } void RvcCommUART::writePacket(BYTE *data , UINT16 size) { int tx_index = 0; while (tx_index < size) { if (writeByte(data[tx_index]) == false) return; tx_index++; } }

答えて

2

ので0xFF-1あり、(その符合は実装依存です)。

unsigned charを使用して「バイト」を表します。

+0

FileRead関数のbyteは受信バイト、bytesは関数が読み込んでいるバイト数です。これはDWORDとして使用する方法です。それを読み取るバイトの値は、問題であったreadPacket –

+0

まで送られます。これは、charバイトからunsigned charバイトに変更したときに機能しました。ありがとう –

関連する問題