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() 放在单独的线程中以防止缓冲区溢出。
我使用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() 放在单独的线程中以防止缓冲区溢出。