Keil環(huán)境,在調(diào)試STM32中犯過(guò)的錯(cuò)
1、貌似的變量沖突
程序中有一個(gè)全局變量賦值gUI = 0x0A;可是發(fā)現(xiàn)gUI并沒(méi)有獲得這個(gè)值,而是另一個(gè)位于RAM區(qū)首地址0x2000 0000的全局變量獲得了這個(gè)值,感覺(jué)奇怪,堆棧溢出?
后來(lái)檢查發(fā)現(xiàn),在程序的前一個(gè)子函數(shù)中有語(yǔ)句:
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號(hào)
上面代碼中ID[8]缺少了字符串結(jié)束符,而OLED_8x16StrP()函數(shù)是以字符串結(jié)束符,也就是某個(gè)字節(jié)為0值判斷顯示結(jié)束的,于是不知道這個(gè)函數(shù)一直執(zhí)行到了哪里,最終導(dǎo)致了貌似堆棧溢出的這樣的現(xiàn)象,將char ID[8]修改為char ID[9]就ok了。
說(shuō)白了還是相當(dāng)于數(shù)組溢出了。