Pyserial缓冲区的填充速度比我读的要快

Nat*_*ate 6 python serial-port pyserial

我正在通过串口读取微控制器的数据,波特率为921600.我正在读取大量的ASCII csv数据,因为它的速度非常快,所以其余的数据都被丢失了我可以读它.我知道我可以手动编辑serialwin32的pyserial源代码以增加缓冲区大小,但我想知道是否还有另一种方法呢?

我只能估计我将收到的数据量,但它大约是200kB的数据.

Ada*_*wis 5

您是否考虑过在将命令发送到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)


jon*_*jon 4

有一个“接收缓冲区”滑块,可从设备管理器中的 com 端口属性页进行访问。通过“端口设置”​​选项卡上的“高级”按钮可以找到它。

com 端口的高级设置

更多信息:

http://support.microsoft.com/kb/131016在标题接收缓冲区下

http://tldp.org/HOWTO/Serial-HOWTO-4.html在标题中断下

尝试将其降低一两级。