2014-02-28 54 views
0

我試圖使用readfile函數從WinCE環境中的CDC設備讀取數據。通訊設備類(CDC)問題閱讀

BOOL WINAPI ReadFile(
    _In_   HANDLE hFile, 
    _Out_  LPVOID lpBuffer, 
    _In_   DWORD nNumberOfBytesToRead, 
    _Out_opt_ LPDWORD lpNumberOfBytesRead, 
    _Inout_opt_ LPOVERLAPPED lpOverlapped 
); 

我想知道什麼是readbuf的大小限制。我發送100個數據塊的256個字節的數據,參數lpNumberOfBytesReadReadFile第一次嘗試返回173個字節,其他所有其他99次返回0。請讓我知道我缺少什麼。另外'writebuf'的大小限制是什麼?下面是該端口的代碼打開

BOOL PortOpen() 
    { 
    Close(); 

ComPort = INVALID_HANDLE_VALUE; 
    COMMTIMEOUTS ct; 




ComPort=CreateFile (TEXT("COM1:"), GENERIC_READ | GENERIC_WRITE, 
        0, NULL, OPEN_EXISTING, 0, NULL); 



if (ComPort != INVALID_HANDLE_VALUE) { 

    dcb.DCBlength = sizeof (dcb); 
    GetCommState (hLocal, &dcb); 
    dcb.BaudRate = 115200; 
    dcb.fParity = FALSE; 
    dcb.fNull = FALSE; 
    dcb.StopBits = ONESTOPBIT; 
    dcb.Parity = NOPARITY; 
    dcb.ByteSize = 8; 
    SetCommState (ComPort, &dcb); 


    ct.ReadIntervalTimeout = 0; 
    ct.ReadTotalTimeoutMultiplier = 0; 
    ct.ReadTotalTimeoutConstant = 0; 
    ct.WriteTotalTimeoutMultiplier = 0; 
    ct.WriteTotalTimeoutConstant = 0; 
    SetCommTimeouts (hLocal, &ct); 

}

+0

如果您已經使用CreateFile打開設備發佈該代碼。 – Sundar

+0

請檢查以上 – user3068597

+0

顯示ReadFile()循環 – PaulH

回答

0

謝謝你的回覆!我的問題已解決。 WindowCE不支持重疊的I/O,讀寫需要在分離的線程中。另外,爲了避免競爭條件,我使用了信號量。

0

超時對於ReadFile的操作,可以SetCommTimeouts API進行配置,你確定你的代碼是不是要求呢?在這種情況下,返回的字節數可能會有所不同,具體取決於您設置的不同超時參數。

+0

我認爲問題是寫入,我寫了256字節,應該有四個64字節的數據包,我得到了前兩個數據包的答案,問題從第三個數據包開始,我繼續拿了30次nake比我在第31次嘗試中得到的答案還要多。 – user3068597