我把Arduino连接到串口 . Arduino有以下简单的代码来发送字节:
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write((char)100);
}
接收字节的代码(在单独的线程中):
int buffersize = 100000;
byte[] buffer = new byte[buffersize];
SerialPort port = new SerialPort("COM3", 9600);
port.ReadBufferSize = buffersize;
port.Open();
int bytesread = 0;
do
{
bytesread = port.BytesToRead;
}
while(bytesread < buffersize && bytesread != buffersize);
port.Read(buffer, 0, buffersize);
我读到BytesToRead可以返回超过ReadBufferSize,因为它包含一个以上的缓冲区 . 但相反,我只能接收近12000,之后ReadBufferSize不会改变 . 所有波特率都会出现同样的问题 .
那么如何一次读取缓冲区中的所有100000字节?也许有一些驱动程序设置等?请帮忙 .
1 回答
如果Arduino以此波特率连续发送字节,则速度将最大为9600/10 = 960字节/秒(1个字节将需要10个波特:8个数据位1开始1个停止) . 然后将在超过104秒内收集100000个字节 . 如果通信没有中断,您的代码应该可以正常工作 . 要调试它,您可以在while循环中添加它:
但是,更好的方法是使用
SerialPort
的DataReceived
事件:事件处理程序: