一、现象
使用 MDK 开发stm32程序的时候出现全局变量被稀里糊涂的修改了。
二、原因分析
经过多方分析,最终发现此问题。该全局变量定义的位置在某个数组后面,而该数组在定义的时候并未定义数组大小,导致全局变量的地址和数组中的某个元素的地址冲突(一模一样)。当数组中此元素的值修改时,该全局变量的值就别同时修改了。如下所示:
int array[] = {0,1,2...};
int global= 0;
三、解决办法(选择一个即可)
1、定义数组的时候给出数组的长度。
2、将全局变量的定义放到数组之前。