2011-10-24 35 views
3

UNIXシリアルポートには大きな出力バッファがあります。書き込み呼び出しは、バッファに空きがある限りすぐに戻ります。十分なスペースがない場合、ブロッキング書き込みはバッファがある程度低レベルになるまで待機します。Windows 7のシリアルポート出力バッファサイズ

Windows 7 SP1では、ビルトインの16550シリアルポートはあたかも出力バッファがないかのように動作します。それはデータがポートから出力されるまで書き込みブロックと思われる。バッファがある場合、デバイスマネージャ(COM1の詳細設定)で設定された16バイトよりもさらに小さくなります。 SetupComm関数を使用すると、入力バッファと出力バッファの推奨サイズを指定できます。ただし、出力バッファサイズは動作を変更しないようで、GetCommPropertiesは常にdwCurrentTxQueueフィールドを0に設定します。 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:おそらく、送信バッファの実際のサイズを決定する一般的な方法はありません。特定のデバイスドライバが使用されている場合は、そのマニュアルを参照する必要があります。 –

関連する問題