1

重要な部分は SerialDataReceivedEventHandler です。

バッファ サイズ自体のほぼ 2 倍のバイト数を読み取る必要があることを (ブレークポイントとホバー オーバーを介して) 観察しています。みたいな?

これがコードです

aUartSemaphoreThatTells.WhatTheUartBackgroundRxIsDoing = (int)aValueWhichIndicatesThat.theUARTisReceivingData;

SerialPort CurrentPort = (SerialPort)sender; //// Int routine gave is this in the arguments

int LastByteInUartBuffer = CurrentPort.ReadBufferSize;
int TheNumberOfBytes = CurrentPort.BytesToRead;
byte[] inputData = new byte[TheNumberOfBytes];
int RenameThisInt = CurrentPort.Read(inputData, 0, TheNumberOfBytes);                 //// This is a C# property method of ports

int Dest;
Dest = UartPlaceHolders.RxBufferLeader; //// Will index into buffer for Chief dispatch

Mouse-Hover-Over を少し実行すると、それがわかります..

  • LastByteInUartBuffer4096あります
  • TheNumberOfBytes 8092あります
  • RenameThisInt 8092あります
  • inputData 適切なものがあります

(自分で生成したので、シリアルポートの反対側からデータがどのように見えるかを知っています)

MSDN サイトの ReadBufferSizeBytesToReadの 2 つのページを読みました。

誰でも、私を修正してください。4K バッファーからほぼ 8K バイトを取得するにはどうすればよいですか?

4

2 に答える 2

1

SerialPort.ReadBufferSize プロパティに関する次の注意事項に注意してください。

ReadBufferSize プロパティは Windows で作成されたバッファーのみを表すため、SerialPort バッファーと Windows で作成されたバッファーの両方を表す BytesToRead プロパティよりも小さい値を返すことができます。

于 2013-01-08T01:24:53.930 に答える
1

答えは、実際には次のドキュメントにありますReadBufferSize

BytesToRead プロパティは、ReadBufferSize プロパティよりも大きな値を返すことができます。これは、ReadBufferSize プロパティが Windows で作成されたバッファーのみを表すのに対し、BytesToRead プロパティは、Windows で作成されたバッファーに加えて SerialPort バッファーを表すためです。

この場合、"Windows によって作成されたバッファー" は、C# SerialPort オブジェクトによって割り当てられたメモリではなく、基になるドライバー メモリです。

于 2013-01-08T01:26:15.807 に答える