Keil环境,在调试STM32中犯过的错
扫描二维码
随时随地手机看文章
1、貌似的变量冲突
程序中有一个全局变量赋值gUI = 0x0A;可是发现gUI并没有获得这个值,而是另一个位于RAM区首地址0x2000 0000的全局变量获得了这个值,感觉奇怪,堆栈溢出?
后来检查发现,在程序的前一个子函数中有语句:
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()函数是以字符串结束符,也就是某个字节为0值判断显示结束的,于是不知道这个函数一直执行到了哪里,最终导致了貌似堆栈溢出的这样的现象,将char ID[8]修改为char ID[9]就ok了。
说白了还是相当于数组溢出了。