3

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

4

1 に答える 1

3

解決策がわかったようです。

/* 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);
Taken from : http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html
于 2012-11-05T11:35:16.697 に答える