2017-12-25 6 views
0

저는 pyserial을 사용하여 mcu 보드에 큰 데이터 패키지를 보내고받습니다. 기본적으로 mcu는 ISR에서 바이트를 수신하고 즉시 전송합니다.Pyserial 일부 데이터가 손실됩니다

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 바이트 (64킬로바이트)이라는 것이다. 즉 port.read (80000)를 사용하면 동일합니다. 항상 64KB를 읽으십시오. 이 제한 사항이 read()입니까?

또한 필자의 pyserial 스크립트는 일부 패키지를 잃어 버렸지 만 항상 그렇지는 않습니다 (약 10 % 실패). TeraTerm을 사용하여 대용량 파일을 보내면 모든 문제가 해결됩니다.

감사합니다.

답변

0

해결책은 버퍼 오버런을 방지하기 위해 별도의 스레드에 read()를 넣는 것이 었습니다.

관련 문제