void DT_Data_Receive_Prepare(u8 data)
{
/* 局部静态变量:接收缓存 */
static u8 RxBuffer[50];
/* 数据长度 *//* 数据数组下标 */
static u8 _data_len = 0,_data_cnt = 0;
/* 接收状态 */
static u8 state = 0;
/* 帧头1 一个数据帧中第一个数据并且判断是否与宏定义帧头1相等*/
if(state==0&&data==title1_received)
{
state=1;
RxBuffer[0]=data;
}
/* 帧头2 一个数据帧中第二个数据并且判断是否与宏定义帧头2相等*/
else if(state==1&&data==title2_received)
{
state=2;
RxBuffer[1]=data;
}
/* 功能字 */
else if(state==2&&data<0XF1)
{
state=3;
RxBuffer[2]=data;
}
/* 长度 */
else if(state==3&&data<50)
{
state = 4;
RxBuffer[3]=data;
_data_len = data;
_data_cnt = 0;
}
/* 接收数据组*/
else if(state==4&&_data_len>0)
{
_data_len--;
RxBuffer[4+_data_cnt++]=data;
if(_data_len==0)
state = 5;
}
/* 校验累加和 */
else if(state==5)
{
state = 0;
RxBuffer[4+_data_cnt]=data;
DT_Data_Receive_Anl(RxBuffer,_data_cnt+5); //调用数据分析函数,总长比索引+1
}
/* 若有错误重新等待接收帧头 */
else
state = 0;
}
功能 应该是接受协议包判断 如果是一个一个字节接受话 就是没接受一个直接 进来判断一次这个字节的作用
buff[0] 和buff[1]自定义内容 一般用来判断是自己的协议包
buff[2] 命令字符
buff[3] 数据长度
buff[4]-buff[len+3] 内容
buff[len+4] 校验和
那是会逐个判断每个else if是否为真吗?当第一个else if为真时,后面的else if是否还会执行?
像这种东西你最好断点调试一步一步的看,比别人说的清楚的多