定义变量 Uint32 SET_TIME;
程序里面没有重复定义的变量名,但是现在运行起来后,该变量值会被莫名的覆盖成其他值,后改动程序屏蔽所有有关该变量的读写操作,只保留定义变量名“Uint32 SET_TIME;”,问题依旧。
下面是仿真起来后,可看到该变量值的变化。
请大师门帮我分析下问题,谢谢
Seven Han:
您工程开了优化吗,可以尝试关闭优化?另外您变量定义加上volatile关键字试试。
定义变量 Uint32 SET_TIME;
程序里面没有重复定义的变量名,但是现在运行起来后,该变量值会被莫名的覆盖成其他值,后改动程序屏蔽所有有关该变量的读写操作,只保留定义变量名“Uint32 SET_TIME;”,问题依旧。
下面是仿真起来后,可看到该变量值的变化。
请大师门帮我分析下问题,谢谢
hu vison:
是否可能是数组操作或者堆栈操作越界了,可以看看该变量所分配地址前面的变量
定义变量 Uint32 SET_TIME;
程序里面没有重复定义的变量名,但是现在运行起来后,该变量值会被莫名的覆盖成其他值,后改动程序屏蔽所有有关该变量的读写操作,只保留定义变量名“Uint32 SET_TIME;”,问题依旧。
下面是仿真起来后,可看到该变量值的变化。
请大师门帮我分析下问题,谢谢
peng huifeng:
之前也遇到这种问题,debug发现变量莫名被修改,由于不知道你的代码是怎么写的,所以我把我的分析和解决问题思路写下来,你可以对照下如何解决:
存在的问题如下:
出现问题的时候在这个函数体内还定义了一个常量数组,常量数组比较大,结果变量在引用的时候很容易被改写
解决思路:当时怀疑是常量数组的问题,将常量数组放在函数体外作为全局变量,发现此问题解决,所以认为是数组太大导致堆栈溢出覆盖了原变量的内存地址;
分析:当进入一个函数时,所有的常亮数组和变量会临时分配内存,这些都是在程序的堆栈中分配的,如果变量过大,则可能导致程序的堆栈溢出从而错误覆盖别的变量,从而导致出错
所以建议你也可以尝试增大程序的堆栈空间分配,看是否问题能够解决!