首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

一个非常奇怪非常奇怪非常奇怪的堆栈溢出的有关问题~来吧~

2012-06-03 
一个非常奇怪非常奇怪非常奇怪的堆栈溢出的问题~高手进来吧~!!!现象:1、刚把程序载进去,还没运行,堆栈就快

一个非常奇怪非常奇怪非常奇怪的堆栈溢出的问题~高手进来吧~!!!
现象:
1、刚把程序载进去,还没运行,堆栈就快满了

刚刚把程序下载进去,还没有运行,就提示堆栈快溢出了:Wed Apr 25 16:12:28 2012: The stack 'Stack' is filled to 99% (4992 bytes used out of 5000). The warning threshold is set to 90.%  


我尝试过:把栈设成2048,3000,4000,5000 均无济于事。 如果是数组越界或者中断造成的问题,那么应该是运行之后产生的,而不应该是下载进去就产生。

2、程序运行起来后,堆栈使用量有变回正常状态。

程序运行起来后,堆栈使用量有变回正常状态,那开始的中断溢出是什么情况??


3、删除掉主函数中的某些函数或者把在main之前的某些注释掉的函数回复,可以消除下载堆栈溢出的症状,但是运行到某些函数(固定的)内的时候,还是会出现堆栈溢出警告。


4、如果运行中出现堆栈溢出警告的话,没执行一步,堆栈内的数据一直都有变化,变化区域非常的大,而且数据均为 3f ff 等数据 3f ff 出现概率最大 最多几乎全是。

5、堆栈设成4000或者5000的时候,刚下载进去就报堆栈要快溢出,占堆栈的98%/99%.但是诡异的是,我把堆栈设成2048的时候,一下载进去报警堆栈要溢出,但是所占的却是90% or 93% 比4000和5000还少. 异或不解。非常诡异 把堆栈设成1000 ,竟然没事了,下载和运行都不会出现堆栈溢出警告。更加不理解了 

6、删掉sprintf()函数后,下载和运行都没有出现堆栈溢出警告。
但是sprintf()我以前的版本也有用到,没有出现过这个问题。

高手出招灭到它吧!!!!!!!!!!

图片:
一:刚再进去就警报堆栈溢出


二、在外面删掉一些函数(或者删掉程序中的一些定义了但是没有用到的代码),消除刚下载就报警堆栈溢出后,运行到一个函数内时,又出现了堆栈溢出:


三、然后程序没有飞,我单步执行,然后看到RAM内的数据一直在变化,大块大块的变,且很多都是重复的 3f ff……






[解决办法]
您看一下SPRINTF的声明,是不是可重入的?

如果你在中断,和主程序中,存在同时调用的话。那是可能会出问题


我这边IAR平台上,也用sprintf也没见出过问题哈
[解决办法]
sprintf用的时候没发现过有这种情况的

WDT_ARST_1000的值是多少

。。

有没有使用流对象

在读取流对象的数据的时,会自动把字符FF3F加到数据开头的

热点排行