关于return返回的值的问题

2019-10-16 08:16发布

SD_Error CmdResp2Error(void)
{
        SD_Error errorstatus=SD_OK;
        u32 status;
        u32 timeout=SDIO_CMD0TIMEOUT;
        while(timeout--)
        {
                status=SDIO->STA;
                if(status&((1<<0)|(1<<2)|(1<<6)))break;//CRC错误/命令响应超时/已经收到响应(CRC校验成功)       
        }
          if((timeout==0)||(status&(1<<2)))        //响应超时
        {                                                                                                                                                                    
                errorstatus=SD_CMD_RSP_TIMEOUT;
                SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);                 //清除命令响应超时标志
                return errorstatus;
        }         
        if(SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL) != RESET)                                                //CRC错误
        {                                                                  
                errorstatus=SD_CMD_CRC_FAIL;
                SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL);                //清除响应标志
        }
        SDIO_ClearFlag(SDIO_STATIC_FLAGS);//清除所有标记
        return errorstatus;                                                                                     
}




这段函数里面的return errorstatus,比如
          if((timeout==0)||(status&(1<<2)))        //响应超时
        {                                                                                                                                                                    
                errorstatus=SD_CMD_RSP_TIMEOUT;
                SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT);                 //清除命令响应超时标志
                return errorstatus;
        }       

响应超时了(ture),这时候return errorstatus;  是直接跳出SD_Error CmdResp2Error(void)函数了,还是继续执行          if(SDIO_GetFlagStatus(SDIO_FLAG_CCRCFAIL) != RESET)                                                //CRC错误

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。