串行通讯, 怎样可靠获多byte的帧头?

const u8 HEAD[] = {0xfe, 0x0f, 0xbc}; //连续的三个固定byte为帧头
void cp_rx(u8 d)  //在接受中断里面调用
{
	cp1wRx.buf[cp1wRx.cnt] = d;
	if(cp1wRx.cnt < 3)
	{
		if (d != HEAD[cp1wRx.cnt])
		{
			cp1wRx.cnt = 0;	
			if(d != 0xfe)   //一定重新找头!!!, 以免连续的头部: 0xfe 0xfe出错
				return;
	    }
	}
	else if(cp1wRx.cnt == 3)	
	{
		cp1wRx.len = d;     //得到了总长度	
	}
	else
	{
		if(cp1wRx.cnt >= (cp1wRx.len + 8))  //长度到了, 收尾
		{
			uartRxDisable();
			cp1wRx.rxOk = 1;
			return;
		}
	}

	if(cp1wRx.cnt < 36)    //防止溢出
		cp1wRx.cnt++;
}

串行通讯, 怎样可靠获多byte的帧头?

比如: 三个固定的帧头: 0xfe, 0x0f, 0xbc

一定要在帧头不对的时候, 重新找帧头!!!, 以免连续的头部出错时, 比如: 0xfe 0xfe, 失去同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值