串口

在向下位机写程序之前,我想把数据输入缓存区清空,如何操作?

是串口的吗?    
  是就用PurgeComm(hCom,PURGE_TXCLEAR);       //清空发送缓冲区  
            PurgeComm(hCom,PURGE_RXCLEAR);       //清空接收缓冲区


如何获得hCom?

我使用CSerial类,尝试这样  
  if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){  
        PurgeComm(serial.m_hFile,PURGE_RXCLEAR);      
        serial.Read(ReplyCode,ReplyCodeLen[type]);  
  }  
  结果还是可以收到,为何?


你是搞蓝牙的么?  
  留下联系方式以后多联系??

if   (Write)  
  PurgeComm  
  WriteFile  
  我是大概是这样一个过程   希望能对你有帮助


请问各位高手,如何获得接受缓冲区的数据长度!
DWORD   dwError   =   0;  
  COMSTAT   comstat;  
  ClearCommError(m_hComm,&dwError,&comstat);  
  comstat.cbInQue   is   the   length
 问题一:  
  我使用CSerial类,尝试这样  
  if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){  
        PurgeComm(serial.m_hFile,PURGE_RXCLEAR);      
        serial.Read(ReplyCode,ReplyCodeLen[type]);  
  }  
  结果还是可以收到数据,没有清空接受缓冲区为何?  
  问题二:  
  if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){  
        DWORD   dwError   =   0;  
        COMSTAT   comstat;  
        ClearCommError(m_hComm,&dwError,&comstat);  
        int   nLength=comstat.cbInQue;    
        serial.Read(ReplyCode,nLength);  
  }  
  每次write   nLength都为零,其实不为零,不能及时正确的返回数据长度为何?  
   
 
comstat.cbInQue   接收缓冲区  
  comstat.cbOutQue   发送缓冲区  
  ?你想干什么,怎么刚往串口写,紧接着就读串口了,  
  你这是什么串口啊(NB)


 楼上的,读写串口可以同时进行,全双工模式就是需要开两个线程同时读写啊

 现在我不知道接受缓冲区数据的长度,但我知道数据的前13个字节中含有可以  
  判断数据长度的数据,我的编程思路是先读取前13个字节,得到数据的长度,然后  
  再write   、read一次,程序如下,  
  int   nLength;  
  PurgeComm(serial.m_hFile,PURGE_RXCLEAR);      
  if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){    
        serial.Read(ReplyCode,13);  
        if(ReplyCode[11]=='M'&&ReplyCode[11]=='R'){  
        PurgeComm(serial.m_hFile,PURGE_RXCLEAR);      
        nLength=25;  
        if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){    
        serial.Read(ReplyCode,nLength);  
        ......  
        }  
  }  
  调试结果是失败的,PurgeComm(serial.m_hFile,PURGE_RXCLEAR)好像没起作用  
  ,第二次读取得数据会有第一次没读取得数据;请分析错在那里,该怎办才能正确  
  读取数据呢

 
  你误会我的意思了,   我是说楼主刚写完数据,  
  根本未曾判断是否有数据收到,就进入读操作。  
  明显效率不高
让我等的好心急;我想可能是没法解决了,还是没人知道呢?  
  在VC中,在读之前,能不能先获得接受缓冲区的字节数,  
  然后再根据字节数去读呢?若行如何做呢?


有这个功夫用CSerial类还不如花一个小时自己写一个串口通信类。。。  
  想干啥就干啥。。。

if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){    
        serial.Read(ReplyCode,13);  
        if(ReplyCode[11]=='M'&&ReplyCode[11]=='R'){  
        PurgeComm(serial.m_hFile,PURGE_RXCLEAR);      
        nLength=25;  
        if(ERROR_SUCCESS==serial.Write((char*)ComCode,ComCodeLen[type])){    
        serial.Read(ReplyCode,nLength);  
        ......  
        }  
  }  
  你这代码有严重的问题!!  
  其实我问你一句,你为什么要PurgeComm呢??  
  当你执行完了serial.Read(ReplyCode,13);后  
  你认为你收到13个字节,//这里是一个隐患(设想收到1个字节后将串口线突然拔掉了。。。)  
  再就是read完后就相当于将缓冲区的数据“剪切”了下来(长度为read返回的长度),  
  根本不用清除什么该死的接收缓冲区。。。  
  再就是最好将接收放在单独的的线程中进行处理,因为我们可以控制发送,但无法预料接收。。  
  试想你的程序刚把数据发送出去,串口线就被老鼠咬断了(或被人拔了),  
  你的程序就死在那儿了??!!shit!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值