当前位置:  技术问答>linux和unix

关于串口数据读取丢失问题

    来源: 互联网  发布时间:2016-02-06

    本文导语:  我向一个串口对象发送了一个指定,串口对象返回了相关的数据(通过监控窗口看到数据完整返回了),但是在读取串口对象时,无法读完正确的数据,在读到部分数据之后(多次循环调用input方法后),select调用返回0,...

我向一个串口对象发送了一个指定,串口对象返回了相关的数据(通过监控窗口看到数据完整返回了),但是在读取串口对象时,无法读完正确的数据,在读到部分数据之后(多次循环调用input方法后),select调用返回0,说没设备准备就绪,请问是什么问题,应该怎么做,才能保证读到完整的数据?
以下是专门读取串口数据的函数
int CSerial::input (char * data, int datalength)
{
    int retval = 0;
    
    FD_ZERO (&fs_read);     //用0初始化文件描述符集
    FD_SET (fd, &fs_read);  //将串口对象加入文件描述符集中
    tv_timeout.tv_sec = TIMEOUT_SEC (datalength, GetBaudrate ());
    tv_timeout.tv_usec = TIMEOUT_USEC;
    
    //通过select监控指定的文件描述符
    retval = select (fd + 1, &fs_read, NULL, NULL, &tv_timeout);
    printf("CSerial::input.  select return %dn",retval);
    if (retval) {
        retval = read (fd, data, datalength);
printf("CSerial::input.  retval=%d  datalength=%dn", retval,datalength);
        return (retval);
    }
    else
        return (-1);
}

|
TError do_get_data(TCom com, void *data, short int nbytes) {

    int received = 0, n;

    assert(data != NULL && nbytes > 0);
    //printf("do_get_data %dn",nbytes);
    while(received != nbytes) {
       n = ReadComPort((INT32)com, (void *)((char *)data + received),
                       nbytes - received);
       // printf("get %dn",n);
       if(n == -1)
         return TIME_OUT;
       received += n;
    }
    return SUCCESS;
} /* do_get_data */

我是这样处理的.

你那也可以用循环来处理

    
 
 

您可能感兴趣的文章:

  • 串口通讯 丢失数据
  • 串口接收数据丢失,怀疑是中断引起的,请指教
  • 分块从串口发送图片数据,总是丢失部分数据,救命~急!急!急!急 (100分)在线等
  • ubunut串口通信read底层传上来的数据时发生数据丢失。
  • 串口接收丢失数据的问题
  • Arm,Linux串口数据丢失的问题
  • 串口读取数据的问题
  • AIX环境下串口读取问题
  • linux串口读取数据的问题,select
  • 通过linux驱动接口读取串口来自另外一个CPU发送的数据,有几个疑问:
  • 请问如何编程实现中断机制读取串口数据
  • 解决Linux串口分段读取?
  • 串口读取GPS数据
  • linux串口读取read函数始终返回值为1,没有返回读到的字符数
  • Linux 串口读取信息出现丢码为什么?
  • 请高手帮我看下这段读取串口的代码哪里出了问题?
  • 关于QT串口读取数据
  • 串口读数据问题,读到了7位数据,可显示所读取数据时候为空,不知原因?
  • Linux 串口读取问题---急--------急--------急--------急------
  • 串口接收数据丢失,怀疑是中断引起的,请指教 iis7站长之家
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 散分100,求解串口键盘和串口鼠标驱动
  • Linux 中用java语言写串口程序,提示找不到串口
  • 高分求助:我笔记本没有串口,在linux下要和一个串口设备连,怎么办?
  • 关于linux串口通信中写串口的问题
  • 开发板串口与实际内核中的串口文件的对应关系怎么回事?谢谢帮忙
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • 工控机有6个串口,但用光盘安装debian6.05,在dev中只找到4个串口,如何解决。
  • linux下串口发送数据用串口精灵接受不到或为全零
  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • 要加多个串口,怎么分别指定他们的driver_name和dev_name以示区别各个串口?
  • 工控机上用光盘安装debian6.05,硬件上有6个串口,但是软件上即dev中只有4个串口,如何解决。
  • 嵌入式linux,串口初始化时,无法设置串口属性
  • 扩展的串口卡上的串口操作的问题
  • 请教串口通信的编程
  • 请问如何以独占的方式打开串口
  • linux串口驱动该怎么写
  • 虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点
  • linux下如何清空串口的输入输出缓存


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3