TI中文支持网
TI专业的中文技术问题搜集分享网站

28035 变量单元值被莫名覆盖

定义变量  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发现变量莫名被修改,由于不知道你的代码是怎么写的,所以我把我的分析和解决问题思路写下来,你可以对照下如何解决:

存在的问题如下:

出现问题的时候在这个函数体内还定义了一个常量数组,常量数组比较大,结果变量在引用的时候很容易被改写

解决思路:当时怀疑是常量数组的问题,将常量数组放在函数体外作为全局变量,发现此问题解决,所以认为是数组太大导致堆栈溢出覆盖了原变量的内存地址;

分析:当进入一个函数时,所有的常亮数组和变量会临时分配内存,这些都是在程序的堆栈中分配的,如果变量过大,则可能导致程序的堆栈溢出从而错误覆盖别的变量,从而导致出错

所以建议你也可以尝试增大程序的堆栈空间分配,看是否问题能够解决!

赞(0)
未经允许不得转载:TI中文支持网 » 28035 变量单元值被莫名覆盖
分享到: 更多 (0)