[求助] 一个非常奇怪的堆栈溢出的问题(IAR MSP430)

liangchaoxi   2012-5-5 21:07 楼主

现象:
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()我以前的版本也有用到,没有出现过这个问题。

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

相关图片在这里有:

http://topic.csdn.net/u/20120505/20/431fab75-9cb3-42d8-aa92-0ef919030c51.html

  • 一下载就溢出
  • 注释掉gprs_send_buf()函数反倒溢出
  • 恢复gprs_send_buf()函数却没有溢出
  • 关掉中断依然无用
  • 即使下载是不溢出,运行到这个函数里面依然会
  • 而且每运行一步RAM里面有大块大块的地址值在变化

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复