请问这段程序中的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;

}

 

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

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

buff[2] 命令字符

buff[3] 数据长度

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

buff[len+4] 校验和

那是会逐个判断每个else if是否为真吗?当第一个else if为真时,后面的else if是否还会执行?

像这种东西你最好断点调试一步一步的看,比别人说的清楚的多