小魚念樂樂 2021-01-05 12:22 采纳率: 0%
浏览 27

请问这段程序中的if-else-if逻辑判断是怎样一个流程?

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;

}
  • 写回答

3条回答 默认 最新

  • 随风飘荡012 2021-01-05 13:11
    关注

    功能 应该是接受协议包判断 如果是一个一个字节接受话 就是没接受一个直接 进来判断一次这个字节的作用

    buff[0] 和buff[1]自定义内容  一般用来判断是自己的协议包

    buff[2] 命令字符

    buff[3] 数据长度

    buff[4]-buff[len+3] 内容 

    buff[len+4] 校验和

    评论

报告相同问题?