2011-10-24 109 views
3

Unix串行端口具有較大的輸出緩衝區。只要緩衝區中有空間,寫入調用就會立即返回。當沒有足夠的空間時,阻塞寫入等待,直到緩衝區被清空到某個低電平。Windows 7中的串行端口輸出緩衝區大小

在Windows 7 SP1中,內置的16550串行端口的行爲就好像沒有輸出緩衝區一樣。看起來寫塊阻塞,直到數據從端口輸出。如果有緩衝區,它甚至比設備管理器中設置的16個字節(在COM1的高級設置中)更小。 SetupComm函數允許我指定輸入和輸出緩衝區的推薦大小。但是,輸出緩衝區大小似乎不會改變任何行爲,並且GetCommProperties始終將dwCurrentTxQueue字段設置爲零。 SetupComm唯一可以做的是增加輸入緩衝區的大小。

+0

機器長時間未配備串口。這是一個真正的端口還是它實際上是一個模擬器?在設備管理器中查看驅動程序。 –

+0

是的,它是PC主板上的真正串行端口。這就是我所說的「建於16550串口」。 16550是一種內置端口通常兼容的UART芯片。 – dreamlayers

回答

1

SetupComm的文檔特別允許設備驅動程序忽略所請求的值。

最好的辦法是使用重疊的I/O並處理自己的緩衝。

+0

該文檔還提到「例如,即使驅動程序不分配緩衝區,該功能也可以成功,只要該系統的其他部分提供相同的功能即可。」我想這只是一個例子,而不是一個保證。感謝重疊的I/O想法。 – dreamlayers

+0

在Windows 7中,各種圖標上有一系列鼠標點擊,這些圖標將顯示給定Com端口的緩衝區大小。這一刻我不記得那個順序。我知道我曾經做過一次。我在超級用戶中詢問了這件事,但沒有得到任何迴應。當我在這個網站上詢問時,一位聲譽超過41,000的用戶立即責備我,因此我撤回了這個問題。我們有一個行爲異常的應用程序,而Win'7本身(而不是我們自己的應用程序)的這種知識(即com端口緩衝區大小)將對我們有很大幫助。謝謝如果有人拿起這個消息。 –

+0

@ User.1:可能沒有任何通用的方法來確定發送緩衝區的實際大小。您需要查看正在使用的特定設備驅動程序的文檔(如果有)。 –