gpt4 book ai didi

Linux,串口,非缓冲模式

转载 作者:太空狗 更新时间:2023-10-29 11:10:16 33 4
gpt4 key购买 nike

我正在尝试在 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() 方法,但它也没有帮助。顺便说一句,我用谷歌搜索了关于 F_NOCACHE arg 到 fcntl() 函数的信息。但!据我所知,这都是关于 BSD 和 Darwin 操作系统的,在 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

关于Linux,串口,非缓冲模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11772239/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com