我正在尝试在 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()方法,但它也没有帮助。
顺便说一句,我已经在 google 上搜索了有关 F_NOCACHE arg 到 fcntl() 函数的信息。但!这都是关于 BSD 和 Darwin OS 的,据我所知,Linux 中没有这样的东西(F_NOACHE arg 到 fcntl)。
更新:
看来我找到了解决方案。
/* 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
看来我找到了解决方案。
/* 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)