Pyserial 丢失了一些数据

Pyserial loses some data

我使用pyserial向mcu板发送和接收大数据包。 基本上,mcu 只是在 ISR 中接收并立即发送字节。

port = serial.Serial(
'COM12',
baudrate=921600,
timeout=0,
parity='N',
stopbits=1,
bytesize=8
)

msg1 = "z200f2000 126543f4 126543f4 126543f4 126543f4 126543f4 126543f4 126543f4 "
multi_msg = ""
for i in range(1000):
     multi_msg = multi_msg + msg1 + str(i) + "\r\n"

port.reset_input_buffer()
port.reset_output_buffer()
ret1 = port.write(multi_msg) 
print multi_msg
print ret1
ret2 = port.in_waiting
print ret2
rcv1 = port.read(port.in_waiting)
print repr(rcv1)

第一个问题是输入缓冲区 (port.in_waiting) 中的最大字节数是 65536 字节 (64KB)。 如果我使用 port.read(80000) 也是一样的。始终读取 64KB。 这是对 read() 的限制吗?

此外,我的 pyserial 脚本似乎丢失了一些包,而且并不总是(大约 10% 失败)。 如果我使用 TeraTerm 发送大文件一切正常。

谢谢。

解决方案是将 read() 放在单独的线程中以防止缓冲区溢出。