0

デバイスに 5 バイトのメッセージを送信するタブレットを持っています。メッセージは正常に配信されましたが、データがバッファの間違った部分に書き込まれることがあります。

バッファを読み取るためのコードは次のとおりです。バッファは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] から開始し、毎回 5 バイトを書き込むと、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。

問題は、ときどきエラーが発生し、バッファーが 1 バイトまたは 2 バイト離れてしまい、この 02, 00, 00, 18, 01 | 02、00、00、18、01 | 02、00、00、18、01 02、00、00、18、01。

メッセージは送信されていますが、読み取りブロックと一致しないため、デバイスはメッセージをガベージと見なすため、メッセージを無視します。

エラーが発生したときにこれを自動的に修正するには、どうすればエラー処理を賢明に行うことができますか? 次の 18 を検索して 5 バイトを読み取るように読み取りを移動するか、次の 18 を見つけてバイトを正しいブロックに書き戻すことを考えていました。

4

0 に答える 0