关于程序中以时间判断接收数据结束时,接收数据长度设置为1时,出现接收不全的问题解释。

首先明确:接收长度不能设置为1

程序代码如下:

if(Paral_RX_Count >= 10 )
{

      //@@@@2@@@@
  if(Paral_RX_NumByte >= 1)
  {

    //@@@@3@@@@
    WriteUart1CyBuf(Paral_RX_NumByte,ParalRcvBuf);
    Paral_RX_Count = 0;
    Paral_RX_NumByte = 0;
  }
}

当Paral_RX_NumByte >=1时,解释如下:

  没有接收数据时,Paral_RX_Count会大于10,走到@@@@2@@@@时,正好收到1个数据,这时程序就会进入@@@@3@@@@,违背程序本意。

当Paral_RX_NumByte >= 2时,就不会出现上面的情况,解释如下:

  没有接收数据时,Paral_RX_Count会大于10,走到@@@@2@@@@时,正好收到1个数据,但是Paral_RX_NumByte >= 2,不会进入@@@@3@@@@,再有数据来到时,已经将Paral_RX_Count设置为0,所以不会出现上面的情况。

因此,程序不能处理一次发送一个字节的情况。

原文地址:https://www.cnblogs.com/zzq888/p/10830049.html