Linux에서 직렬 포트로 nob 블로킹 읽기 - 쓰기 기능을 구성하려고합니다. 여기에 코드가 있습니다 : http://pastebin.com/RSPw7HAi 모두 잘 작동하지만 버퍼링됩니다. 즉, 콘솔 + CR 기호를 통해 직렬로 입력하면 select는 새로운 입력을 감지하고, 그렇지 않으면 간단한 파이썬 스크립트를 통해 입력을 수행하면 모든 기호를 버퍼링하고 캐리지 리턴 기호를 보낼 때까지 대기한다는 것을 의미합니다. 이 입력 (아래에 있음)은 단순히 기호를 어딘가에 버퍼링합니다. 나는 아무도 여기에 무엇을 말해 줄 수,리눅스, 직렬 포트, 비 - 버퍼링 모드
#!/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()
그래서 USB2Serial 컨버터를 통해 연결된 PC에 있나요? 내 C 파일에서 포트 열기 내에서 뭔가를 변경해야합니까, 아니면 파이썬 스크립트로 끝내야합니까? 나중에 flush() 메서드를 사용했지만 도움이되지 않았습니다. BTW, fcntl() 함수에 F_NOCACHE arg에 대해 살펴 보았습니다. 그러나! BSD와 Darwin OS에 관한 모든 것입니다. Linux에서 볼 수있는 한 그런 것은 없습니다 (F_NOACHE arg to fcntl).
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
이 질문을 답이 표시되지 않도록 답을 게시하고 수락 할 수 있습니까? – dsolimano
그래, 끝냈어 .... –