我正在通过串口以 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/