5. 局部变量初始值问题

对于局部变量ulAirsCompleFlg,函数本意是进来后必须为0,然后处理后返回,但是实际应用中发现,编译器并不会把ulAirsCompleFlg变量初始化0,导致程序bug

uint32_t MgAirGetCompleFlg(MG_AIR_CTRL *p_air_dev)
{
    uint32_t ulAirsCompleFlg;
    uint8_t i;

    for(i=0;i<AIR_MAX_NUM;i++){
        ulAirsCompleFlg |= (p_air_dev->tType[i].ucCmdEndFlg<<i);
    }
    return ulAirsCompleFlg;
}

修改后的代码如下

uint32_t MgAirGetCompleFlg(MG_AIR_CTRL *p_air_dev)
{
    uint32_t ulAirsCompleFlg=0;  /* 必须赋初始值 */
    uint8_t i;

    for(i=0;i<AIR_MAX_NUM;i++){
        ulAirsCompleFlg |= (p_air_dev->tType[i].ucCmdEndFlg<<i);
    }
    return ulAirsCompleFlg;
}