串口VMIN和VTIME设置

linux 下串口编程VTIME和VMIN的设置
Python termios 模块,tcgetattr() 实例源码

	struct termios attr;tcgetattr(fd,&attr);attr.c_cc[VMIN]=255;attr.c_cc[VTIME]=255;tcflush(fd,TCIFLUSH);tcsetattr(fd,TCSANOW,&attr);

VMIN:[0-255]
VTIME:[0-255]

VMIN =0,VTIME=0:读不到数据,read立即返回。
VMIN!=0,VTIME=0:读到VMIN个数据才返回,否则阻塞等待。
VMIN!=0,VTIME!=0:读到VMIN个数据,或者从进入read后读第一个数据VTIME时间,任一满足返回,单位为S。没有数据会阻塞。
VMIN=0,VTIME!=0:读不到数据,read阻塞vtime时间返回

#! /usr/bin/env python
#coding=utf-8import pty
import os,stat
import select
import time
import termiosdef mkpty():#open ptymaster1,slave = pty.openpty()slaveName1 = os.ttyname(slave)master2,slave = pty.openpty()slaveName2 = os.ttyname(slave)print 'salve device names read-write: ',slaveName1,slaveName2return master1,master2,slaveName1,slaveName2def setRawMode(master):iflag  = 0oflag  = 1cflag  = 2lflag  = 3ispeed = 4ospeed = 5cc = 6VMIN = 0VTIME = 1termAttr = termios.tcgetattr(master)termAttr[iflag] &= ~(termios.IGNBRK|termios.BRKINT|termios.PARMRK|termios.ISTRIP|termios.INLCR|termios.IGNCR|termios.ICRNL|termios.IXON)termAttr[oflag] &= ~termios.OPOSTtermAttr[lflag] &= ~(termios.ECHO|termios.ECHONL|termios.ICANON|termios.ISIG|termios.IEXTEN)termAttr[cflag] &= ~(termios.CSIZE|termios.PARENB)termAttr[cflag] |= termios.CS8#termAttr[cc][VMIN] = 255#termAttr[cc][VTIME] = 255termios.tcsetattr(master,termios.TCSANOW,termAttr)if __name__ == "__main__":master1,master2,slaveName1,slaveName2 = mkpty()setRawMode(master2)setRawMode(master1)cnt = 0rl,wl,el = select.select([master1],[master2],[],1)os.chmod(slaveName1,stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)os.chmod(slaveName2,stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO)while True:data = os.read(master1,1)cnt += 1print("read %d data, cnt %d"% (len(data),cnt))for n in data:print hex(ord(n)),print ''print 'from ',slaveName1,'to ',slaveName2n = os.write(master2,data)print 'write data ',n
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>#define BUFFSIZE 200int readpts(char *path)
{int fd;int ret;int n;char buffer[BUFFSIZE];fd = open(path,O_RDONLY|O_NOCTTY);if(fd==-1){perror("open failed\n");return -1;}struct termios attr;tcgetattr(fd,&attr);attr.c_cc[VMIN]=0;attr.c_cc[VTIME]=0;tcflush(fd,TCIFLUSH);tcsetattr(fd,TCSANOW,&attr);int i;printf("ready to read\n");int cnt = 0;while(1){n = read(fd, buffer,BUFFSIZE);printf("read %d data,cnt %d \n",n,++cnt);for(i=0;i<n;i++){printf("0x%0x  ",((char*)buffer)[i]);}printf("\n");}return 0;
}int writepts(char *path)
{int fd;int ret;int num;int n;char buffer[BUFFSIZE] = {0x61,0x62,0x63,0x64};int i;fd = open(path,O_RDWR|O_NOCTTY);if(fd==-1){perror("open failed \n");return -1;}printf("ready to write,please input num(<=4)\n");int loop = 0;while(1){scanf("%d",&num);if(num>4){printf("input num should <=4\n");continue;}loop++;n = write(fd, buffer,num);printf("loop %d,write data %d:\n",loop,n);for(i=0;i<n;i++){printf("0x%0x  ",((char *)buffer)[i]);}printf("\n");}return 0;
}int main(int argc,char *argv[])
{if(argc == 3){if(argv[1][0]=='r'){readpts(argv[2]);return 0;}else if(argv[1][0]=='w'){writepts(argv[2]);return 0;}}printf("usage: ./a.out r   or   ./a.out w\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux串口编程详解

Linux串口编程详解(阻塞模式、非阻塞模式、select函数) 之前一直觉得串口编程很简单&#xff0c;这两天仔细研究后发现串口里的各种参数还挺复杂&#xff0c;稍不注意就容易出错&#xff0c;这里总结一下网上的各种文章及自己的理解与实践。 open 函数 功能描述&#xff1a;用…

远程WEB控制MP3播放器设计(基于mini2440)

网上有很多 基于mini2440的MP3播放器设计的资料&#xff0c;多是按键控制&#xff0c;这里博主做了些轻微改动&#xff0c;利用远程WEB来控制MP3播放&#xff0c;具体怎么实现&#xff0c;下面会给出&#xff0c;大家先看看效果&#xff1a; WEB界面&#xff1a; 后台运行&…

线程以及pthread库的使用

https://blog.csdn.net/weixin_38102771/article/details/91351126 https://blog.csdn.net/qq_29677867/article/details/108571388?utm_mediumdistribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm1001.2101.3001.4242 一.什么是线程 你可以想象你一边…

嵌入式数据库 SQLite 浅析

SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS&#xff0c;它可移植性好&#xff0c;很容易使用&#xff0c;很小&#xff0c;高效而且可靠。SQLite嵌入到使用它的应用程序中&#xff0c;它们共用相同的进程空间&#xff0c;而不是单独的一个进程。从外…

程序会话后继续运行

https://blog.csdn.net/qq_44925149/article/details/89474134

socket 请求Web服务器过程

HTTP协议只是一个应用层协议&#xff0c;它底层是通过TCP进行传输数据的。因此&#xff0c;浏览器访问Web服务器的过程必须先有“连接建立”的发生。 而有人或许会问&#xff1a;众所周知&#xff0c;HTTP协议有两大特性&#xff0c;一个是“无连接”性&#xff0c;一个是“无状…

有些事情现在不做一辈子就都不会做了

这句话最近一直印在我的脑海里。这句话最早是在Casperkid的百度空间里面看见的&#xff0c;那时他生日。作为师傅的刺&#xff08;道哥&#xff09;送了他自己写的一本《白帽子讲WEB安全》给他&#xff0c;并在扉页上写着这句话。那时一看到这句话&#xff0c;仿佛有种触电的感…

让事件飞——Linux eventfd 原理

让事件飞——Linux eventfd 原理 让事件飞 ——Linux eventfd 原理与实践 原文作者&#xff1a;杨阳 eventfd/timerfd 简介 目前越来越多的应用程序采用事件驱动的方式实现功能&#xff0c;如何高效地利用系统资源实现通知的管理和送达就愈发变得重要起来。在Linux系统中&…

HTTP 数据包头解析

一、连接至Web服务器 一个客户端应用&#xff08;如Web浏览器&#xff09;打开到Web服务器的HTTP端口的一个套接字&#xff08;缺省为80&#xff09;。 例如&#xff1a;http://www.myweb.com:8080/index.html 在Java中&#xff0c;这将等同于代码&#xff1a; [java] view pla…

linux epoll 开发指南-【ffrpc源码解析】

linux epoll 开发指南-【ffrpc源码解析】 摘要 关于epoll的问题很早就像写文章讲讲自己的看法&#xff0c;但是由于ffrpc一直没有完工&#xff0c;所以也就拖下来了。Epoll主要在服务器编程中使用&#xff0c;本文主要探讨服务器程序中epoll的使用技巧。Epoll一般和异步io结合…

Shell 脚本中如何使用make命令

最近开发的项目中需要编写Shell脚本对整个工程进行自动化编译&#xff0c;即在Shell脚本中使用make命令来进行编译&#xff0c;下面回顾一下Shell脚本中如何使用make命令&#xff09; 在开发一个系统时&#xff0c;一般是将一个系统分成几个模块&#xff0c;这样做提高了系统的…

c语言linux TCP长连接 socket收发范例 断开自动重连

原文链接&#xff1a;https://blog.csdn.net/chenhao0568/article/details/103420615 c语言linux TCP长连接 socket收发范例 断开自动重连 改进1&#xff1a;加入接收超时。可以做别的事&#xff0c;等有接收才响应 #include <stdio.h> #include <stdlib.h> #inc…

Shell 脚本知识回顾 (六) —— Shell 函数

一、Shell函数&#xff1a;Shell函数返回值、删除函数、在终端调用函数 函数可以让我们将一个复杂功能划分成若干模块&#xff0c;让程序结构更加清晰&#xff0c;代码重复利用率更高。像其他编程语言一样&#xff0c;Shell 也支持函数。Shell 函数必须先定义后使用。 Shell 函…

ICE相关链接

ZeroC IceGrid介绍及demo构建&#xff08;使用IceBox&#xff09; ice grid 第一篇 ICE通信之IceGrid服务&#xff08;二&#xff09; IceGrid注册器复制 Ice服务详解及应用_IceGrid(01)IceGrid应用 配置手册 https://blog.csdn.net/abcdefg367/category_8275964.html ICE通信框…

C# 托管资源和非托管资源(Dispose、析构函数)

https://www.cnblogs.com/herenzhiming/articles/9691524.html 资源分类&#xff1a; 托管资源指的是.NET可以自动进行回收的资源&#xff0c;主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的&#xff0c;有.NET运行库在合适调用垃圾回收器进行回收。…

Shell 脚本知识回顾 (五) —— Shell 循环

一、Shell for循环 与其他编程语言类似&#xff0c;Shell支持for循环。 for循环一般格式为&#xff1a;for 变量 in 列表 docommand1command2...commandN done 列表是一组值&#xff08;数字、字符串等&#xff09;组成的序列&#xff0c;每个值通过空格分隔。每循环一次&…

android开发工具下载

android studio eclipse sdk adt

Shell 脚本知识回顾 (四) —— Shell 命令及Shell 相关语句

一、Shell echo命令 echo是Shell的一个内部指令&#xff0c;用于在屏幕上打印出指定的字符串。命令格式&#xff1a;echo arg您可以使用echo实现更复杂的输出格式控制。 显示转义字符 echo "\"It is a test\""结果将是&#xff1a;"It is a test"…

qt工程。。。。。。

分享Qt多工程多目录的编译案例&#xff0c;subdirs Qt编译debug和release版本–CONFIG(debug,debug|release) QT工程pro设置实践(with QtCreator)----非弄的像VS同样才顺手? Qt创建动态库并添加动态库版本号 qmake&#xff1a;变量手册 QtCreator按顺序编译多个子项目

Shell 脚本知识回顾 (三) —— 替换、运算符、字符串、数组

一、Shell替换&#xff1a;Shell变量替换&#xff0c;命令替换&#xff0c;转义字符 如果表达式中包含特殊字符&#xff0c;Shell 将会进行替换。例如&#xff0c;在双引号中使用变量就是一种替换&#xff0c;转义字符也是一种替换。 举个例子&#xff1a; [cpp] view plaincop…