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;
}