我有一个平板电脑向设备发送一条 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 | 18, 01, 02, 00, 00 发送 5 条消息后。
问题是偶尔会发生错误,缓冲区结束了一个 ot 两个字节,看起来像这样 02, 00, 00, 18, 01 | 02, 00, 00, 18, 01 | 02、00、00、18、01 02、00、00、18、01。
正在发送消息,但设备会忽略它们,因为它将消息视为垃圾,因为它与读取块不对齐。
发生错误时,我能做些什么来自动解决这个问题?我正在考虑移动读取以搜索下一个 18 并读取 5 个字节,或者尝试找到下一个 18 并将字节写回正确的块中。