1.suggest parentheses around comparison in operand of '&' [-Wparentheses]
建议在'&'的操作数比较周围加上括号
警告语句
while(HWREG(PRCM_BASE_ADDR3 + CM_PER_SPI0_CLKCTRL) &
CM_PER_SPI0_CLKCTRL_IDLEST != CM_PER_SPI0_CLKCTRL_IDLEST_FUNC);
解决这个警告就是在与运算操作的两边加上括号,修改为
while((HWREG(PRCM_BASE_ADDR3 + CM_PER_SPI0_CLKCTRL) &
CM_PER_SPI0_CLKCTRL_IDLEST) != CM_PER_SPI0_CLKCTRL_IDLEST_FUNC);
2.suggest parentheses around '-' inside '>>' [-Wparentheses]
警告语句
Set = 0xFFFFFFFFu - (Period*(Time-DMTimerIsrExecTime)/Time)>>1;
解决这个警告就是在右移操作的两边加上括号修改为
Set = 0xFFFFFFFFu - ((Period*(Time-DMTimerIsrExecTime)/Time)>>1);
3.missing braces around initializer [-Wmissing-braces]
警告语句
typedef struct
{
UINT8 data_suc_flag;
UINT16 data_len;
UINT16 rec_data[16384];
}DATA_TYPE;
DATA_TYPE data[2]=
{
1, 16384, {65535,0,1,2,3},
1, 16384, {1,2,3,4,5,6},
};
这个警告是因为初始化缺少了大括号,使得初始化参数的分类不易区分,修改为
DATA_TYPE data[2]=
{
{1, 16384, {65535,0,1,2,3}},
{1, 16384, {1,2,3,4,5,6}}
};
4.a label can only be part of a statement and a declaration is not a statement
报错的语句是"REC8030_ISOMDATA* pIsoM = (REC8030_ISOMDATA*)lpbyData;"
case INDEX_SUBSLOT_ISOCHRONOUSMODE:
REC8030_ISOMDATA* pIsoM = (REC8030_ISOMDATA*)lpbyData;
APP_DWORD Sub = (APP_DWORD)ntohs(pIsoM->SubSlotNumber);
APP_DWORD Slot = (APP_DWORD)ntohs(pIsoM->SlotNumber);
//..........其余代码省略
break;
因为switch中的几个case语句是同一作用域。所以如果在某个case下声明的变量,对象的作用域是两个{}之间,也就是整个switch语句,其他的case语句也有作用。可以在有变量声明的case语句中加入{}来表明声明的变量的作用域只在这个case。
修改如下
case INDEX_SUBSLOT_ISOCHRONOUSMODE:
{
REC8030_ISOMDATA* pIsoM = (REC8030_ISOMDATA*)lpbyData;
APP_DWORD Sub = (APP_DWORD)ntohs(pIsoM->SubSlotNumber);
APP_DWORD Slot = (APP_DWORD)ntohs(pIsoM->SlotNumber);
//..........其余代码省略
break;
}