CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

VC中怎样设置串口一次接收数据〉8个字节?谢谢

楼主tramper2000(tramper)2005-06-01 10:45:17 在 VC/MFC / 基础类 提问

在串口接收中,用ClearCommError()函数,得到的comstat的cbInQue总<=8,怎样才能〉8?  
  就是说我收22个数要分3次才能收完。怎样才能一次收完阿?谢谢! 问题点数:0、回复次数:12Top

1 楼LIN1120()回复于 2005-06-01 14:15:43 得分 0

用sleep()函数,强制线程休眠,22个数大概有30ms就可以,你还可以通过设COMMTIMEOUTS的各个参数考虑两个字符到达的时间间隔是否到达一定超时时间,不过第一种方法比较简单Top

2 楼tramper2000(tramper)回复于 2005-06-01 15:53:16 得分 0

不是这样,当收〉8个字节时,  
  有这种情况:  
  EV_RXCHAR事件发生了,我用ClearCommError查询字节数,cbInQue会是0,咋回事?Top

3 楼lfchen(一条晚起的虫--床上用品[家纺]专卖)回复于 2005-06-01 16:10:20 得分 0

用API就不会有问题了  
  用MSCOMM我还没找到办法  
  关注Top

4 楼openforever(++)回复于 2005-06-01 16:27:10 得分 0

不明白,没这个问题的呀  
   
  SetInBufferSize(1024);   //设置输入缓冲区的大小(设置了吗?)  
  Top

5 楼jobine(愚人渡)回复于 2005-06-01 16:36:01 得分 0

EV_RXCHAR事件发生了,我用ClearCommError查询字节数,cbInQue会是0,咋回事?  
  缓冲中的数据已空。应该重新用CleareCommError进行测试。  
  另外如果是异步读串口,ReadFile可能因另一个IO操作在进行而返回FALSE,   需要用GetOverLappedResult来获得真正读取的字节数。  
  Top

6 楼LIN1120()回复于 2005-06-01 19:01:32 得分 0

如果cbInQue=0并不能保证没接到字符的话,是不是用GetOverLappedResult就直接判断收到几个字节就好了呢?我没见过这方面的例子耶!能讲详细点吗?多谢!!Top

7 楼tramper2000(tramper)回复于 2005-06-01 19:05:04 得分 0

jobine(愚人渡):  
  EV_RXCHAR事件发生了,  
  我设了个循环一直读,用ClearCommError查询字节数,cbInQue一直是0  
  咋回事阿?Top

8 楼tramper2000(tramper)回复于 2005-06-01 19:06:28 得分 0

LIN1120()   :  
  GetOverLappedResult应该是readfile以后判断拉Top

9 楼jobine(愚人渡)回复于 2005-06-01 19:31:34 得分 0

给你一段程序看一下  
  BOOL   CXXComm::ReadComm(DWORD   &dwBytesRead)  
  {  
  BYTE byBuffer[BUFFER_LENGTH];  
  DWORD dwError;  
  BOOL bRead   =   TRUE,   bRet   =   FALSE;  
  COMSTAT comstat;  
  while   (m_bCommOpen)  
  {  
  if   (ClearCommError(m_hComm,   &dwError,   &comstat)   &&   dwError   >   0) //if   any   error  
  {  
  ::PurgeComm(m_hComm,   PURGE_RXCLEAR   |   PURGE_RXABORT);  
  break;  
  }  
  if   (0   ==   comstat.cbInQue)  
  {  
  break;  
  }  
  if   (bRead)  
  {  
  if   (!ReadFile(m_hComm,   byBuffer,   BUFFER_LENGTH,   &dwBytesRead,   &m_ov))  
  {  
  if   (GetLastError()   ==   ERROR_IO_PENDING)  
  {  
  bRead   =   FALSE;  
  }  
  else  
  {  
  dwBytesRead   =   0;  
  //error,   unhandled  
  }  
  }  
  else  
  {  
  bRead   =   TRUE;  
  }  
  }  
  if   (!bRead)  
  {  
  bRead   =   TRUE;  
  if   (!GetOverlappedResult(m_hComm,   &m_ov,   &dwBytesRead,   TRUE))  
  {  
  dwBytesRead   =   0;  
  //error,   unhandled  
  }  
  }  
  if   (dwBytesRead   >   0)  
  {  
  bRet   =   TRUE;  
  m_cs.Lock();  
  m_InBuffer.AddBuffer(dwBytesRead,   byBuffer);  
  m_cs.Unlock();  
  }  
  }//while  
  return   bRet;  
  }Top

10 楼tramper2000(tramper)回复于 2005-06-01 20:07:40 得分 0

jobine(愚人渡):  
  if   (dwBytesRead   >   0)  
  {  
  bRet   =   TRUE;  
  m_cs.Lock();  
  m_InBuffer.AddBuffer(dwBytesRead,   byBuffer);  
  m_cs.Unlock();  
  }  
  是什么意思啊?m_InBuffer,byBuffer是怎么定义的阿?  
   
  谢谢!  
  Top

11 楼tramper2000(tramper)回复于 2005-06-01 20:56:39 得分 0

大虾们说说话阿  
  Top

12 楼gitolf()回复于 2005-06-01 21:07:52 得分 0

呀,我也正碰到了这个问题呢,同问同问。Top

相关问题

  • 串口通信,比如接收6个字节,会触发两次,第一次接收6个字节,第二次接收0个字节
  • 串口通信,比如接收6个字节,会触发两次,第一次接收6个字节,第二次接收0个字节
  • 关于串口通讯中的ComStat.cbInQue是否能正确反映的串口接收到的字节个数
  • 发送六个字节,用串口调试器sscom接收到的字节不同???
  • 使用MSComm控件来串口通讯,关于接收多字节时候会截断的问题
  • 串口利用modbus向寄存器请求数据,返回一个4字节的浮点数,我接收后如何组成浮点数
  • 求教:有关串口通信问题:下位机每5ms发送一帧32字节大小数据到pc,如何接收?谢谢谢
  • 串口接收数据的问题?
  • 串口接收数据如何处理?
  • 串口数据怎么接收????????

关键词

  • 串口

得分解答快速导航

  • 帖主:tramper2000

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo