2017-12-25 24 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) 

第1の問題は、入力バッファ(port.in_waiting)の最大バイト数が65536バイト(64KB)であることです。 つまりport.read(80000)と同じです。必ず64KBを読みます。 この制限はread()ですか?

また、私のpyserialスクリプトはいくつかのパッケージを失うように見えますが、必ずしもそうではありません(約10%は失敗します)。 大きなファイルを送信するためにTeraTermを使用しても問題ありません。

ありがとうございました。

答えて

0

解決策は、バッファオーバーランを防ぐためにread()を別のスレッドに配置することでした。

関連する問題