2

よろしくお願いし<termios.h>ます。私が理解しているように、UART を介して何かを読み取る際には 2 つのバッファーが存在します。受信したバイトが格納されるハードウェア バッファーと、ハードウェア バッファーに格納されたものを読み込むソフトウェア バッファーです。私が理解しているように、このソフトウェアバッファは2番目の引数read(uart_channel, BUFFER, length)です。

説明してください: ハードウェア バッファの長さは? 時間の長さを制御できますか? 私にとって、デバイスが UART 経由で送信した最新の 12 バイトを読み取ることが重要です。これを確実にするにはどうすればよいですか?

4

2 に答える 2

0

私が見たほとんどのuCには、たとえば[1,2,4,8,16]バイト後に割り込みを設定できるハードウェアFIFOがあります。FIFO が、現在設定されているボー レートの文字間隔の小さな倍数の間「部分的にいっぱい」のままになっている場合、UART はとにかく割り込みます。できるだけ早くバイトにアクセスする必要がある場合は、FIFO の「長さ」を 1 に設定する必要があります。もちろん、ドライバは UART を初期化するときにこれを行う必要があります。

それができない場合は、ポーリングできると思います:(

于 2015-05-26T17:05:32.933 に答える
0

私はかつて同様の状況にありましたが、私がしたことは、UART を読み続ける (ブロッキングread) スレッドを作成し、スレッド間で FIFO を使用することでした。

スレッド化を使用できない場合は、単に使用できますselect

于 2015-05-26T16:04:37.640 に答える