我正在尝试在Linux中使用串口组织非阻塞读写功能。这是我拥有的代码: http://pastebin.com/RSPw7HAi。
它完全正常工作,但是有缓冲区。这意味着,如果我通过控制台+ CR符号向串口输入,选择检测到新输入,否则,如果我通过简单的Python脚本进行输入,则会缓冲所有符号并等待直到我发送回车符号。
因此,对于下面给出的输入,它仅仅在某个地方缓存符号。
我必须使用USB2Serial转换器连接两台PC。
所以,有人能告诉我该怎么做吗?我是需要在我的C文件中更改端口开放还是需要用python脚本来完成?我后来使用了flush()方法,但它也没有帮助。 顺便说一句,我已经在Google上搜索了有关fcntl()函数的F_NOCACHE参数。但是!这都是关于BSD和Darwin操作系统的,Linux中并没有这样的东西(fcntl的F_NOACHE参数),据我所看到的。 更新: 看起来我找到了解决方案。
它完全正常工作,但是有缓冲区。这意味着,如果我通过控制台+ CR符号向串口输入,选择检测到新输入,否则,如果我通过简单的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上搜索了有关fcntl()函数的F_NOCACHE参数。但是!这都是关于BSD和Darwin操作系统的,Linux中并没有这样的东西(fcntl的F_NOACHE参数),据我所看到的。 更新: 看起来我找到了解决方案。
/* 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
这篇文章将介绍关于使用串口(RS-232)在Unix/Linux环境下进行输入输出的基础知识。它将涵盖一些常见问题,如设置波特率、数据位和校验位等,并提供一些实例来演示如何使用串口。通过这篇文章,您将学习如何使用串口通信,以及在需要时如何进行调试和故障排除。