2013-04-20 129 views
2

我遇到了串口代碼的問題。串行端口,WriteFile影響ReadFile

我只是做:

opencomm(); 
send(); 
closecomm(); 

ClearCommError() (inside recv())回報 comstat.cbInQue已發送相同的金額。

所以,如果sizeof (sendbuff)是100, 我在comstat.cbInQue得到100。

讀取一個字節與ReadFile,comstat.cbInQue遞減後(當然在後續ClearCommError()後)。

讀取的值不是寫入的值。 沒有設備連接到端口。

最奇怪的是這個代碼曾經工作,但不再。

WORD sendbuff[128]; 
static HANDLE hComm; 

static void opencomm (void) 
{ 
    static COMMTIMEOUTS timeouts = {0,0,0,0,0}; 

    static DCB dcb = { 
     sizeof (DCB), // DCBlength 
     115200, // * BaudRate 
     1,  // fBinary 
     0,  // * fParity 
     0,  // fOutxCtsFlow 
     0,  // fOutxDsrFlow 
     0,  // fDtrControl 
     0,  // fDsrSensitivity 
     1,  // fTXContinueOnXoff 
     0,  // fOutX 
     0,  // fInX 
     0,  // fErrorChar 
     0,  // fNull 
     0,  // fRtsControl 
     0,  // fAbortOnError 
     0,  // fDummy2 
     0,  // wReserved 
     8*k, // XonLim 
     2*k, // XoffLim 
     8,  // * ByteSize 
     0,  // * Parity 
     0,  // * StopBits 
     0,  // XonChar 
     1,  // XoffChar 
     0,  // ErrorChar 
     0,  // EofChar 
     0,  // EvtChar 
     0  // wReserved1 
    }; 

     hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
     if (hComm != INVALID_HANDLE_VALUE) { 
      SetupComm(hComm, 16*k, 16*k); 
      SetCommState(hComm, &dcb); 
      SetCommTimeouts(hComm, &timeouts); 
     } 
} 

static void closecomm (void) 
{ 
     CloseHandle(hComm); 
} 

static BYTE recv (void) 
{ 
    BYTE text; 
    DWORD temp; 

    COMSTAT comstat; 

     while (1) { 
      ClearCommError(hComm, &temp, &comstat); 
      if (comstat.cbInQue != 0) break; 

      Sleep(1); 
     } 

     ReadFile(hComm, &text, 1, &temp, NULL); 

     return text; 
} 

static void send (void) 
{ 
    DWORD temp; 

     // send to other comp 
     WriteFile(hComm, sendbuff, sizeof (sendbuff), &temp, NULL); 

     // check other comp done 
     if (recv() != 0xAA) { 
      Beep(1000, 100); 
      quit(); // comm error 
     } 
} 
+0

爲了完整性,請包含'sendbuff'的** real **聲明,它的外觀在同一個源文件中位於這些函數之上。 – WhozCraig 2013-04-20 08:49:32

+0

增加了sendbuff。人們可能會抱怨sendbuff未被初始化,這就是爲什麼我第一次沒有包含它。 – aleksazr 2013-04-20 09:02:32

回答

1

這是電纜。屏蔽不當,時間太長。

相關問題