最近写51单片机程序的时候遇到一个问题,如下:
我定义了一个变量:unsigned char insert_id = 0;
然后有一定条件下就会加上1,这是我的程序的目的。但是真正下载到单片机中运行时却出现了条件一触发就变量自动变成0,这个问题困扰了我几个小时。
随后想到的一个办法是再在设个变量下面定义了一个变量:unsigned char insert_id1 = 0;
然后执行与上面变量一样的操作却没有出现复位变成0的情况。之后我就把上面的变量与相关操作全部删除了,结构是新定义的变量也出现了上面的情况。无奈,只能在这个新定义的变量上面再定义一个上面都不做的变量。
这可能是内存的原因,但是有没有哪位大神遇到过类似的请情况,是怎么解决的?
有一些回答的小伙伴没有仔细看我的问题:我说明一下:
简单而言就是我定义了两个一样的变量,但是一个执行时会复位,一个正常。
代码就不贴了,几百行,贴了你们也不看
听描述不是全局和局部的问题,可能是内存溢出,一般可能是数组越界,这些问题,往这个方向找一找
是直接仿真查看变量值,还是用条件语句判断的?
条件语句判断有时候并不一定正确,编译器过度优化的话得加上 volatile
不然的话,就有可能是其他地方修改了这个数据。
楼主还是上一下代码吧,这种问题好诡异啊。
最好是在程序的不同地方都加一些LED的控制指令,看看大约是执行到哪里时会为0.
再缩小bug范围,直到找到问题。