【问题标题】:Linux, serial port, non-buffering modeLinux,串口,非缓冲模式
【发布时间】:2012-08-02 06:35:55
【问题描述】:

我正在尝试在 Linux 中使用串行端口组织 nob-blocking 读写功能。这是我的代码:http://pastebin.com/RSPw7HAi 一切正常,但它是缓冲的。这意味着,如果我通过控制台 + 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() 方法,但它也没有帮助。 顺便说一句,我已经用谷歌搜索了 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

【问题讨论】:

  • 您能否将解决方案作为答案发布并接受它,这样这个问题就不会显示为未回答?

标签: linux serial-port nonblocking unbuffered


【解决方案1】:

看来我找到了解决办法。

/* 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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2010-11-29
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多