8443|11

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CCS 4.1.2 关于堆栈的使用 [复制链接]

CCS4.1.2 一个237K大小的工程,烧写到FLASH后程序一直跑飞,怀疑是堆栈溢出,于是我将默认的0x400增大为0x3000,debug后查看.map文件,发现堆栈已使用0x3000,请问这种情况是“堆栈溢出”么,如果是,通常是由于什么原因造成的?

最新回复

我正在写一个程序,有很大的局部变量数据和很多函数嵌套调用(我觉得很大很多),然后程序会在某一行以上正常运行,这一行一下就胡乱运行,。我也觉得可能是栈的溢出的问题。。。。。。。但是,我观察map文件,仅仅看到的我栈空间设置的大小,没有看到使用的栈的大小(我都不知道还能看,栈的使用的空间大小。。。。。。。)。。。。。。后来我把栈大小调成了64M,然后就完全好了。。。。。。。。。。。。。。。。。。。。。。。。。  详情 回复 发表于 2017-7-16 10:17
 
点赞 关注

回复
举报

6040

帖子

204

TA的资源

版主

沙发
 
堆是堆,栈是栈,具体描述要分开説。
栈溢出,通常是局部变量过多,函数调用嵌套过深导致。例如在函数里面申请过大的数组,或者递归调用等等,会导致栈溢出。

点评

定义的局部变量时蛮多的,但是函数嵌套没有的啊,也没定义数组!而且我也想不明白,再大也不至于用了0x3000这么大的堆栈吧  详情 回复 发表于 2016-3-16 20:16
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

板凳
 
本帖最后由 dontium 于 2016-3-16 17:55 编辑

什么程序会用0X3000那么大的堆栈呢?
唾弃跑飞有多方面的原因,除程序问题外,外部干扰也会的。C2000在象电源方面的应用,调试时跑飞是正常现象。

点评

嗯,我刚开始也以为是电源之类的硬件问题影响的,所以用了一个较小的程序进行试验,发现烧写后能成功运行的,请问这种可能是什么原因?  详情 回复 发表于 2016-3-16 20:17
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

4
 
堆栈在子程序调用时使用,一般使用LCR,它也仅用两个字节,子程序内有临时变量时再用2~4个字节,算下来也不会用多少堆栈的。

点评

嗯,那请问是不是会有一些程序的错误会造成堆栈的溢出?  详情 回复 发表于 2016-3-16 20:19
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

5
 
lcofjp 发表于 2016-3-16 17:00
堆是堆,栈是栈,具体描述要分开説。
栈溢出,通常是局部变量过多,函数调用嵌套过深导致。例如在函数里面 ...

定义的局部变量时蛮多的,但是函数嵌套没有的啊,也没定义数组!而且我也想不明白,再大也不至于用了0x3000这么大的堆栈吧

点评

你是设置了那么大,所以占用了那么多空间。 实际使用多少编译器并不能准确推断。  详情 回复 发表于 2016-3-17 10:04
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

6
 
dontium 发表于 2016-3-16 17:44
什么程序会用0X3000那么大的堆栈呢?
唾弃跑飞有多方面的原因,除程序问题外,外部干扰也会的。C2000在象 ...

嗯,我刚开始也以为是电源之类的硬件问题影响的,所以用了一个较小的程序进行试验,发现烧写后能成功运行的,请问这种可能是什么原因?
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

7
 
dontium 发表于 2016-3-16 18:02
堆栈在子程序调用时使用,一般使用LCR,它也仅用两个字节,子程序内有临时变量时再用2~4个字节,算下来也不 ...

嗯,那请问是不是会有一些程序的错误会造成堆栈的溢出?

点评

堆栈溢出好象有提示的,---- 我忘了。 你都设置了那么大的堆栈还出现错误,为什么还要怀疑是堆栈溢出呢?  详情 回复 发表于 2016-3-17 10:31
 
 
 

回复

6040

帖子

204

TA的资源

版主

8
 
15951757556 发表于 2016-3-16 20:16
定义的局部变量时蛮多的,但是函数嵌套没有的啊,也没定义数组!而且我也想不明白,再大也不至于用了0x30 ...

你是设置了那么大,所以占用了那么多空间。
实际使用多少编译器并不能准确推断。

点评

我刚开始也是这么觉得的,但是我查看我小程序的map文件,发现定义的400大小的堆栈,只使用了380  详情 回复 发表于 2016-3-22 14:55
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

9
 
15951757556 发表于 2016-3-16 20:19
嗯,那请问是不是会有一些程序的错误会造成堆栈的溢出?

堆栈溢出好象有提示的,----  我忘了。

你都设置了那么大的堆栈还出现错误,为什么还要怀疑是堆栈溢出呢?

点评

因为我通过.map文件查看堆栈使用情况,发现定义了3000大小的堆栈全部用完了,所以我怀疑是堆栈溢出  详情 回复 发表于 2016-3-22 14:53
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

10
 
dontium 发表于 2016-3-17 10:31
堆栈溢出好象有提示的,----  我忘了。

你都设置了那么大的堆栈还出现错误,为什么还要怀疑是堆栈溢出 ...

因为我通过.map文件查看堆栈使用情况,发现定义了3000大小的堆栈全部用完了,所以我怀疑是堆栈溢出
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

11
 
lcofjp 发表于 2016-3-17 10:04
你是设置了那么大,所以占用了那么多空间。
实际使用多少编译器并不能准确推断。

我刚开始也是这么觉得的,但是我查看我小程序的map文件,发现定义的400大小的堆栈,只使用了380
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

12
 
我正在写一个程序,有很大的局部变量数据和很多函数嵌套调用(我觉得很大很多),然后程序会在某一行以上正常运行,这一行一下就胡乱运行,。我也觉得可能是栈的溢出的问题。。。。。。。但是,我观察map文件,仅仅看到的我栈空间设置的大小,没有看到使用的栈的大小(我都不知道还能看,栈的使用的空间大小。。。。。。。)。。。。。。后来我把栈大小调成了64M,然后就完全好了。。。。。。。。。。。。。。。。。。。。。。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表