Linux のシリアル ポートを使用して nob-blocking 読み書き機能を整理しようとしています。ここに私が持っているコードがあります: http://pastebin.com/RSPw7HAi すべて正常に動作しますが、バッファリングされています。つまり、コンソール + CR シンボルを介してシリアルに入力すると、select は新しい入力を検出します。それ以外の場合、単純な python スクリプトを介して入力すると、すべてのシンボルがバッファリングされ、キャリッジ リターン シンボルが送信されるまで待機します。したがって、この入力 (以下に示す) を使用すると、シンボルをどこかにバッファリングするだけです。USB2Serial コンバーター経由で PC を接続する必要があります
#!/usr/bin/env python3
import serial
cmd1_state = b'\x3E\x01\x00\x01'
#Selecting serial port for commands to be sent --> /dev/ttyUSB0
serial_0 = serial.Serial('/dev/ttyUSB2');
print("Using serial port ", serial_0.portstr);
serial_0.write(cmd1_state)
# closing serial port
serial_0.close()
では、ここで何をすべきか誰か教えてもらえますか? Cファイルのポート開放内で何かを変更する必要がありますか、それともpythonスクリプトで行う必要がありますか? 後で flush() メソッドを使用しましたが、これも役に立ちませんでした。ところで、私は fcntl() 関数への F_NOCACHE 引数について調べました。しかし!それはすべて BSD と Darwin OS に関するものです。私が見る限り、Linux にはそのようなもの (fcntl への F_NOACHE 引数) はありません。
UPD:解決策を見つけたようです。
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 char received */
tcflush(fd, TCIFLUSH);
から取得: http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html