Browse Source

【主线待合】check返回0超时后,直接清空buffer重新同步而不是一字节一字节丢弃

master
Lizongdi 6 days ago
parent
commit
3a184f817b
  1. 36
      peripheral/com.c

36
peripheral/com.c

@ -201,6 +201,34 @@ int rd_ComWrite(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize)
return iRet; return iRet;
} }
/*****************************************************************************
: rd_ComDropAll
:
"超时一次只丢1字节"(11520011.5KB/s)
: TComCtrl *_ptComCtrl
:
:
: rd_RingbufferGet
: rd_ComRead
*****************************************************************************/
static void rd_ComDropAll(TComCtrl *_ptComCtrl)
{
char dropBuf[64];
int n;
if (NULL == _ptComCtrl)
{
return;
}
/* 循环整块读出并丢弃,直到缓冲区被取空为止 */
do
{
n = rd_RingbufferGet(_ptComCtrl->m_stComBuf.m_ptRecv, dropBuf, (int)sizeof(dropBuf));
} while (n > 0);
}
/***************************************************************************** /*****************************************************************************
: rd_ComRead : rd_ComRead
: buffer实际大小 : buffer实际大小
@ -292,8 +320,8 @@ int rd_ComRead(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize)
if ((u32CurrentTime - ptMutiDev->m_uiLastRecvTime) > RECV_TIMEOUT) if ((u32CurrentTime - ptMutiDev->m_uiLastRecvTime) > RECV_TIMEOUT)
{ {
char temp[1]; // 超时:整块丢弃残留数据,快速重新同步,而不是一次只丢一个字节
rd_RingbufferGet(_ptComCtrl->m_stComBuf.m_ptRecv, temp, 1); // 丢弃旧数据 rd_ComDropAll(_ptComCtrl);
// 重置该设备的时间戳,准备迎接下一次可能的通信 // 重置该设备的时间戳,准备迎接下一次可能的通信
ptMutiDev->m_uiLastRecvTime = 0; ptMutiDev->m_uiLastRecvTime = 0;
@ -400,8 +428,8 @@ int rd_ComRead(TComCtrl *_ptComCtrl, char *_pBuffer, uint32_t _iSize)
if ((u32CurrentTime - ptMutiDev->m_uiLastRecvTime) > RECV_TIMEOUT) if ((u32CurrentTime - ptMutiDev->m_uiLastRecvTime) > RECV_TIMEOUT)
{ {
char temp[1]; // 超时:整块丢弃残留数据,快速重新同步
rd_RingbufferGet(_ptComCtrl->m_stComBuf.m_ptRecv, temp, 1); rd_ComDropAll(_ptComCtrl);
ptMutiDev->m_uiLastRecvTime = 0; ptMutiDev->m_uiLastRecvTime = 0;
_ptComCtrl->m_iDevIndex = -1; _ptComCtrl->m_iDevIndex = -1;
return RD_FAILURE; return RD_FAILURE;

Loading…
Cancel
Save