请教:
     是这样的:
     单片机向 PC 发送数据,数据的长度是不定的
     数据的偶是以 
     @开始, 
     第  2个字符表示后面数据长度
     # 结束
     如:
     @52344#  //5 个字符
     @9sdfgfhhf# //9 个字符
1:
PC 这边是不是每接收一个字符,就中断?
还是?2:
PC 这边每接收一个字符,是不是接收缓冲长度加 13:
读取缓冲区,就使缓冲区长度减去读取的长度,是吗?
比如:
len2=com1.Read(str,2);
那么缓冲区的长度,就减2,是不?4:
PC 这边的程序要怎么写啊?
比如:
我需要完整的接收 @52344#谢谢!

解决方案 »

  1.   

    开一个线程循环读取,
    每次读取一定的字节放到缓冲另一buffer里面,
    接收完了再判断buffer里的数据
    程序自己网上搜下,很多的,同步的,异步的都有
    大致就这么些吧,一年不做忘光了。
      

  2.   

    可以一个接受,然后判断后面数据长度n,根据长度,动态分配堆数据,new char[n]
      

  3.   

    用overlapped模式来读,有多少读多少(进一个buf),然后判断$,之后长度,然后按长度来读缓冲,读到指定长度后看结尾的是不是对的,对的话就读完一个包了.........
      

  4.   

    哥哥教你个笨办法(很有效):采用每个字节中断的方法:@52344#基本思路:1、遇到 @ 就开始;
    2、遇到 # 就结束。1、定义一个数组,作接收数据用:
    unsigned char dataBuf[100];2、定义一个偏移量,表示接收的字节个数:
    int nOffset = 0;3、大概流程:if( recData == '#' )  // 遇到结束符就去处理
    {
      doFunction();
      return;
    }if( recData == '@' )
      nOffset = 0;  // 不管什么时候,只要遇到 @ 就重新开始
    dataBuf[nOffset++] = recData;  // 保存数据后,偏移量加1