原创 LINUX串口编程VTIME和VMIN

2012-10-18 14:31 2246 23 24 分类: 软件与OS

3、VTIME 和  VMIN

VTIME  定义要求等待的零到几百毫秒的值(通常是一个8位的unsigned char变量)。
VMIN 定义了要求等待的最小字节数, 这个字节数可能是0。
只有设置为阻塞时这两个参数才有效,仅针对于读操作。
说起来比较复杂,举个例子吧,设置为阻塞状态,写操作未进行实验,这里仅讨论读操作,
read(fd,&buf,8); // 读串口

3.1
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 0;
VMIN = 0,当缓冲区字节数 >= 0 时进行读操作,实际上这时读串口操作并未被阻塞,因为条件始终被满足。

3.2
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 1;
VMIN = 1,当缓冲区字节数 >= 1 时进行读操作,当没有数据时读串口操作被阻塞。

3.3
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 4;
VMIN = 4,当缓冲区字节数 >= 4 时进行读操作,否则读串口操作被阻塞。每次读出的最大字节数由read函数中第三个参数决定。直到缓冲区剩下的数据< read 第三个参数 并且< 4 (如果这时read第三参数为 1 则进行4次读操作直至读完缓冲区,如read第三参数为2,连续进行读操作,直至缓冲区空或还剩一个字符)。没有设置VTIME,剩下的字符没有确定的期限,直到下次满足读条件的时候才被读出。

----------------------------------考虑VTIME-----------------------------

3.4
options.c_cc[VTIME] = 10; //单位百毫秒
options.c_cc[VMIN] = 4;
同3.3的区别就是,没满足条件或读缓冲区中剩下的数据会在1秒(10百毫秒)后读出。另外特别注意的是当设置VTIME后,如果read第三个参数小于VMIN ,将会将VMIN 修改为read的第三个参数,即使用read(fd,&buf,2);,以上设置变为:
options.c_cc[VTIME] = 10;
options.c_cc[VMIN] = 2;

文章评论1条评论)

登录后参与讨论

用户377235 2015-3-24 12:02

这么好的东西 必须顶!

相关推荐阅读
用户370614 2015-02-05 15:42
AD7794 AD7795 AD7793 AD7792 程序 驱动代码 驱动程序 单片机代码
本驱动代码适用于ADI公司的AD779X系列ADC芯片,所有与硬件平台相关的代码都最大化的提取了出来,达到了最优化的移植性,本文档及代码旨在分享个人的开发工作,减少工程师们的开发周期,提高大家的工...
用户370614 2012-10-29 11:33
linux proc/stat文件信息
proc/stat包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。 [work@builder ~]$ cat /proc/stat cpu 432661 132...
用户370614 2012-10-18 14:55
platform_get_resource函数实现细节
platform_get_resource函数源码如下: struct resource *platform_get_resource(struct platform_device ...
用户370614 2012-10-18 14:50
MII和RMII
项目名称:基于FPGA的以太网MII数据和RMII数据的协议转换  关键词:以太网 MII RMII 协议转换   项目信息:   应用领域:网络与通...
用户370614 2012-10-18 14:49
linux中断之中断注册
专业的linux驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux下通过request_irq来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以linux-2.6....
用户370614 2012-10-18 14:47
linux下查看和添加PATH环境变量
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。<?xml:namespace prefix =...
我要评论
1
23
关闭 站长推荐上一条 /2 下一条