用KEIL写STM32代码,经常遇到操作指针失误,引起越界覆盖数据的问题,调试方法如下:
假设我们有个结构体的参数莫名其妙的被修改了,去工程中搜索KEIL的“.map”文件,查找你被覆盖的变量位置。这里假设inf这个结构体被误操作了,在map文件中搜索该结构体名,找到该结构体。
一般来说都是前面的数据覆盖了后面的数据,所以重点排查前面的变量在何时被操作,是否正确的被操作,这时一般就可以找到问题的根源了。
还有一种方法:
首先重定向printf函数到串口X,哪个串口方便用哪个,网上教程很多。
printf("%s ,%d k %d\r\n",__FILE__,__LINE__,inf.obdinfo.key_status);
将这句话插在你觉得可能有错误的地方,看看这个变量到底在哪里被修改了,通过前后“卡”代码段的方式将代码范围步步缩小,直到找到错误发生的地方。
网友评论