我有一个平板电脑向设备发送一个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并将字节写回正确的块。