从缓冲区读取时的错误处理

时间:2013-11-04 16:53:29

标签: network-programming buffer

我有一个平板电脑向设备发送一个5字节的消息,我发送的消息正常,但有时数据被写入缓冲区的错误部分。

我读取缓冲区的代码如下,buffer是一个int [25]

if((tempByte != 0) && (tempByte != 0xEE))           // If 'ready' returned..
{
  tempByte &= 0x3F;
  if(tempByte > 0) 
  { 
    for(i = 0; i < tempByte; i++)
    {
      buffer[bufferWrite] =  periph_irxdata() ;
      bufferWrite++;
      bufferContents++;
      if(bufferWrite > 24) 
      {
        bufferWrite = 0;
      }           
    }
  }
}

if(bufferContents >= 5)
{
  for(i = 0; i < 5; i++)
  {
    readings[i] = buffer[bufferRead];
    bufferRead++;
    bufferContents--;
    if(bufferRead > 24) 
    {
      bufferRead = 0;
    }        
  }

  if(readings[0] == 0x18)
  {
    tabletValue = readings[2];
    OnOff = readings[1];
  }
}

这个想法是,如果你从[0]开始并且每次写入8个字节,那么18,01,02,00,00的消息将从值[0],[5],[10]开始重复[ 15] [20]。

这将是18,01,02,00,00 | 18,01,02,00,00 | 18,01,02,00,00 |已发送5条消息后18,01,02,00,00。

问题在于偶尔会发生错误并且缓冲区最终会被拖出一个字节,看起来像这样的02,00,00,18,01 | 02,00,00,18,01 | 02,00,00,18,01 02,00,00,18,01。

正在发送消息,但是设备会忽略它们,因为它看到消息是垃圾,因为它们与读取块不对齐。

如果错误处理明智,我可以做什么来自动修复它? 我正在考虑移动读取以搜索下一个18并读取5个字节,或者尝试查找下一个18并将字节写回正确的块。

0 个答案:

没有答案