Keil環(huán)境,在調試STM32中犯過的錯
1、貌似的變量沖突
程序中有一個全局變量賦值gUI = 0x0A;可是發(fā)現(xiàn)gUI并沒有獲得這個值,而是另一個位于RAM區(qū)首地址0x2000 0000的全局變量獲得了這個值,感覺奇怪,堆棧溢出?
后來檢查發(fā)現(xiàn),在程序的前一個子函數(shù)中有語句:
char ID[8];
sprintf(ID, "%02X%02X%02X%02X", Card_Id[0], Card_Id[1], Card_Id[2], Card_Id[3] );
OLED_8x16StrP(0,2,(u8 *)ID); //液晶顯示ID號
上面代碼中ID[8]缺少了字符串結束符,而OLED_8x16StrP()函數(shù)是以字符串結束符,也就是某個字節(jié)為0值判斷顯示結束的,于是不知道這個函數(shù)一直執(zhí)行到了哪里,最終導致了貌似堆棧溢出的這樣的現(xiàn)象,將char ID[8]修改為char ID[9]就ok了。
說白了還是相當于數(shù)組溢出了。