CCS4.1.2 一个237K大小的工程,烧写到FLASH后程序一直跑飞,怀疑是堆栈溢出,于是我将默认的0x400增大为0x3000,debug后查看.map文件,发现堆栈已使用0x3000,请问这种情况是“堆栈溢出”么,如果是,通常是由于什么原因造成的?
堆是堆,栈是栈,具体描述要分开説。
栈溢出,通常是局部变量过多,函数调用嵌套过深导致。例如在函数里面申请过大的数组,或者递归调用等等,会导致栈溢出。
什么程序会用0X3000那么大的堆栈呢?
唾弃跑飞有多方面的原因,除程序问题外,外部干扰也会的。C2000在象电源方面的应用,调试时跑飞是正常现象。
本帖最后由 dontium 于 2016-3-16 17:55 编辑
堆栈在子程序调用时使用,一般使用LCR,它也仅用两个字节,子程序内有临时变量时再用2~4个字节,算下来也不会用多少堆栈的。
定义的局部变量时蛮多的,但是函数嵌套没有的啊,也没定义数组!而且我也想不明白,再大也不至于用了0x3000这么大的堆栈吧
嗯,我刚开始也以为是电源之类的硬件问题影响的,所以用了一个较小的程序进行试验,发现烧写后能成功运行的,请问这种可能是什么原因?
嗯,那请问是不是会有一些程序的错误会造成堆栈的溢出?
堆栈溢出好象有提示的,---- 我忘了。
你都设置了那么大的堆栈还出现错误,为什么还要怀疑是堆栈溢出呢?
因为我通过.map文件查看堆栈使用情况,发现定义了3000大小的堆栈全部用完了,所以我怀疑是堆栈溢出
我刚开始也是这么觉得的,但是我查看我小程序的map文件,发现定义的400大小的堆栈,只使用了380
我正在写一个程序,有很大的局部变量数据和很多函数嵌套调用(我觉得很大很多),然后程序会在某一行以上正常运行,这一行一下就胡乱运行,。我也觉得可能是栈的溢出的问题。。。。。。。但是,我观察map文件,仅仅看到的我栈空间设置的大小,没有看到使用的栈的大小(我都不知道还能看,栈的使用的空间大小。。。。。。。)。。。。。。后来我把栈大小调成了64M,然后就完全好了。。。。。。。。。。。。。。。。。。。。。。。。。