uint8_t NetRSSI=0;
uint8_t NetBer=0;
uint8_t failtime=0;
sscanf(&USART_RX_BUF[0],"%*s%u,%u",&NetRSSI,&NetBer);//此句警告 warning: #181-D: argument is incompatible with corresponding format string conversion。意思是NetRSSI,NetBer這兩個變量的類型與sscanf中的類型不符。
當然可以忽略,因為如果USART_RX_BUF中的字符確實在0-255以內可以得到正確的結果,但是。。。。此處不能忽略。
因為有
uint8_t failtime=0;
這個變量類型定義。
我之前忽略后,發現scanf賦值給上述變量的值並沒有轉換成unsigned char,而是將int后面的3個字節覆蓋掉了failtime的內存位置,導致只要一執行上述的ssanf語句后failtime立即被清零。
修改后的為
uint32_t NetRSSI=0;
uint32_t NetBer=0;
uint8_t failtime=0;
編譯后既不警告,運行時也不會出錯了。
在此提醒,不可輕易忽略警告,特別是涉及到不同長度的變量轉換時。