全局变量与局部变量在SRAM中的地址分配冲突该如何解决?
最近在排一个AVR 128单片机程序故障时发现,全局变量与局部变量在SRAM中的地址分配冲突,全局变量是已经分配好的,而局部变量是执行时临时分配的,没想到现在竟然冲突了,之前从未遇到过,不知道该怎么解决了,不知坛里的大神们是否也遇到过,有什么解决办法没?忘不吝赐教!非常感谢! 汇编么。。。。 C的话,这不是编译器干的活啊。 编译器有bug?多弄成全局 栈溢出了? 在函数里定义了大数组吧? 你的Link配置文件是否可以定义Stack的大小?可能设置为0,就放到全局RAM里面了。 明显是栈空间溢出了 Jacky.Qiu 发表于 2018-9-7 22:44你的Link配置文件是否可以定义Stack的大小?可能设置为0,就放到全局RAM里面了。 ...
stack本来就在ram里面啊。否则执行个毛线。 全局变量,地址是编译器连接时分配的。局部变量,我理解为函数里面非静态存储的变量,这个变量是在栈空间分配的。栈空间大小是可以自己定义的,在栈溢出的情况下,地址不会一样。最好贴代码看看,还有你看到地址相同的调试记录抓屏。 这种情况一般都是数组溢出了,或者局部变量定义的太大,栈溢出了,你吧局部变量都定义成全局变量就行了。 函数里面有大数组,或栈空间设置太小导致栈溢出,编译器并不会检测你栈用了多少,因为栈是动态的,可能你每次进函数得到的局部变量地址都不一样的。
典型的代码设计缺陷,可以将栈适当加大,或者把局部变量的数组换成全局变量,统一分配地址,如果空间不够编译器会报警的。 堆栈溢出?LZ什么编译器? 全局变量怎么分配的?汇编?C? BASIC... 楼主怎么确定是地址冲突? john78 发表于 2018-9-8 09:44
堆栈溢出?LZ什么编译器? 全局变量怎么分配的?汇编?C? BASIC...
CVAVR编译器,用的是C语言 asj1989 发表于 2018-9-8 09:13
这种情况一般都是数组溢出了,或者局部变量定义的太大,栈溢出了,你吧局部变量都定义成全局变量就行了。 ...
嗯嗯,明天我试试哈,先谢谢了{:handshake:} xzhiwei 发表于 2018-9-8 09:47
楼主怎么确定是地址冲突?
在调试的时候,把变量到窗口里面看的 lingdianhao 发表于 2018-9-8 09:19
函数里面有大数组,或栈空间设置太小导致栈溢出,编译器并不会检测你栈用了多少,因为栈是动态的,可能你每 ...
好的,我试试
页:
[1]