python - Pyserial 缓冲区填充速度快于我的阅读速度

标签 python serial-port pyserial

我正在通过串口以 921600 的波特率从微 Controller 读取数据。我正在读取大量的 ASCII csv 数据,由于它的速度如此之快,缓冲区已满,其余所有数据我还没来得及阅读就迷路了。我知道我可以手动编辑 serialwin32 的 pyserial 源代码以增加缓冲区大小,但我想知道是否还有其他解决方法?

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

最佳答案

您是否考虑过在向 uC 发送命令以发送数据之前正在运行的单独线程中读取串行接口(interface)?

这将消除写入命令和开始读取之后的一些延迟。有other SO users谁已经成功使用这种方法,当然他们没有缓冲区溢出。

如果不清楚,请告诉我,我可以拼凑一些东西来展示这一点。

编辑

再考虑一下,如果您尝试从缓冲区中读取并将其写入文件系统,那么即使独立线程也可能无法拯救您。为了最大限度地减少处理时间,您可以考虑一次读取 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;

关于python - Pyserial 缓冲区填充速度快于我的阅读速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10125009/

相关文章:

binary - 如何将二进制闪存文件发送到只有串行控制台的嵌入式系统?

error-handling - 串行连接中断时 “During handling of the above exception, another exception occurred”的无限循环

linux - 通过串行端口将十六进制闪烁到带有 Pyserial 的 LPC 微 Controller 不起作用

python - 在 Pandas 聚合函数中命名返回的列?

python - 为什么当我从 lambda 调用 tkSimpleDialog.askstring 时 Tkinter 挂起?

c - 没有与连接的串行端口通信?

python - 从代码中禁用pyserial中的DTR

python - Pandas 的元素不在索引列表中

python - 如何批量插入或创建多个数据

c# - 后台串口读取循环