zoukankan      html  css  js  c++  java
  • Linux串口中的超时设置

        在Linux下使用串口通信时,默认的阻塞模式是不实用的。而采用select或epoll机制的非阻塞模式,写代码有比较麻烦。幸好Linux的串口自己就带有超时机制。

        Linux下使用termios.h中的的接口进行串口设置。具体的波特率,数据位等属性的设置在这就不详细说明了,百度上很多。

        使用termios.h的接口进行超时设置,主要是配置 VTIME 和 VMIN 两个字段。其中VTIME指定了等待的时间(timeout=VTIME*100ms),VMIN指定了读取字符的最小数量。

        注意要使这两个字段生效,必须使串口工作于非标准模式。可以通过如下方式设置为RAW模式(非标准模式的一种,多用于通信):

    /* struct termio newtio; */
    newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/ newtio.c_oflag &= ~OPOST; /*Output*/

        VTIME和VMIN需配合使用,它们的组合关系如下:

        1、VTIME=0,VMIN=0:此时即使读取不到任何数据,函数read也会返回,返回值是0。

        2、VTIME=0,VMIN>0:read调用一直阻塞,直到读到VMIN个字符后立即返回。

        3、VTIME>0,VMIN=0:read调用读到数据则立即返回,否则将为每个字符最多等待 VTIME*100ms 时间。

        4、VTIME>0,VMIN>0:read调用将保持阻塞直到读取到第一个字符,读到了第一个字符之后开始计时,此后若时间到了 VTIME*100ms 或者时间未到但已读够了VMIN个字符则会返回。若在时间未到之前又读到了一个字符(但此时读到的总数仍不够VMIN)则计时重新开始(即每个字符都有VTIME*100ms的超时时间)。




  • 相关阅读:
    jQuery插件主要有两种扩展方式
    系统负载测试工具-LoadRunner
    安全扫描工具-AppScan
    newinstance()和new有什么区别?(转)
    类的加载、连接和初始化 (转)
    tar 基础
    了解【重放攻击】
    DDLDMLDCLDQL
    web.xml的配置问题
    组合与聚合
  • 原文地址:https://www.cnblogs.com/electron/p/3451114.html
Copyright © 2011-2022 走看看