Nat*_*ate 6 python serial-port pyserial
我正在通过串口读取微控制器的数据,波特率为921600.我正在读取大量的ASCII csv数据,因为它的速度非常快,所以其余的数据都被丢失了我可以读它.我知道我可以手动编辑serialwin32的pyserial源代码以增加缓冲区大小,但我想知道是否还有另一种方法呢?
我只能估计我将收到的数据量,但它大约是200kB的数据.
您是否考虑过在将命令发送到uC以发送数据之前运行的单独线程中从串行接口读取?
这将在写入命令和开始读取之后消除一些延迟.还有其他SO用户使用此方法取得了成功,因为他们没有缓冲区溢出.
如果这不清楚,请告诉我,我可以一起扔东西来表明这一点.
编辑
考虑一下,如果你试图从缓冲区读取并将其写入文件系统,即使是独立的线程也可能无法保存.为了最大限度地缩短处理时间,您可以考虑一次读取100个字节serial.Read(size=100)
并将该数据推送到队列中以在传输完成后处理所有数据
伪代码示例
def thread_main_loop(myserialobj, data_queue):
data_queue.put_no_wait(myserialobj.Read(size=100))
def process_queue_when_done(data_queue):
while(1):
if len(data_queue) > 0:
poped_data = data_queue.get_no_wait()
# Process the data as needed
else:
break;
Run Code Online (Sandbox Code Playgroud)
有一个“接收缓冲区”滑块,可从设备管理器中的 com 端口属性页进行访问。通过“端口设置”选项卡上的“高级”按钮可以找到它。
更多信息:
http://support.microsoft.com/kb/131016在标题接收缓冲区下
http://tldp.org/HOWTO/Serial-HOWTO-4.html在标题中断下
尝试将其降低一两级。