ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux,串行端口,非缓冲模式

2019-12-01 01:00:57  阅读:269  来源: 互联网

标签:nonblocking serial-port unbuffered linux


我正在尝试在Linux中使用串行端口来组织nob阻止读写功能.这是我的代码: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 OS的,在Linux中没有这样的东西(F_NOACHE arg到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

解决方法:

看起来我找到了解决方案.

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

标签:nonblocking,serial-port,unbuffered,linux
来源: https://codeday.me/bug/20191201/2077300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有