用KEIL寫STM32代碼,經(jīng)常遇到操作指針失誤,引起越界覆蓋數(shù)據(jù)的問題坯沪,調(diào)試方法如下:
假設(shè)我們有個(gè)結(jié)構(gòu)體的參數(shù)莫名其妙的被修改了,去工程中搜索KEIL的“.map”文件擒滑,查找你被覆蓋的變量位置腐晾。這里假設(shè)inf這個(gè)結(jié)構(gòu)體被誤操作了叉弦,在map文件中搜索該結(jié)構(gòu)體名,找到該結(jié)構(gòu)體藻糖。
一般來說都是前面的數(shù)據(jù)覆蓋了后面的數(shù)據(jù)淹冰,所以重點(diǎn)排查前面的變量在何時(shí)被操作,是否正確的被操作巨柒,這時(shí)一般就可以找到問題的根源了樱拴。
還有一種方法:
首先重定向printf函數(shù)到串口X,哪個(gè)串口方便用哪個(gè)洋满,網(wǎng)上教程很多晶乔。
printf("%s ,%d k %d\r\n",__FILE__,__LINE__,inf.obdinfo.key_status);
將這句話插在你覺得可能有錯(cuò)誤的地方,看看這個(gè)變量到底在哪里被修改了牺勾,通過前后“卡”代碼段的方式將代碼范圍步步縮小正罢,直到找到錯(cuò)誤發(fā)生的地方。