搜索
bottom↓
回复: 24

求助 谁知道单片机堆栈溢出怎么处理呀

[复制链接]

出0入0汤圆

发表于 2012-8-16 12:56:12 | 显示全部楼层 |阅读模式
求助 谁知道单片机堆栈溢出怎么处理呀

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-8-16 13:03:28 | 显示全部楼层
程序里注意内存的释放
或选用内存更大的单片机

出0入54汤圆

发表于 2012-8-16 13:04:22 | 显示全部楼层
是不是开了局部变量的大的数组啊

出0入0汤圆

 楼主| 发表于 2012-8-16 13:40:05 | 显示全部楼层
lusson 发表于 2012-8-16 13:04
是不是开了局部变量的大的数组啊

是的 开了 没办法 用得到 肿么办呀

出0入0汤圆

发表于 2012-8-16 13:41:38 来自手机 | 显示全部楼层
RAM小了吧 换单片机或者外置RAM

出0入0汤圆

发表于 2012-8-16 13:43:26 | 显示全部楼层
如果能确定溢出,那分析下原因,解决问题就简单了吧!

出0入0汤圆

发表于 2012-8-16 14:22:05 | 显示全部楼层
精简下咯~~

出0入54汤圆

发表于 2012-8-16 17:51:09 | 显示全部楼层
bingbingliang 发表于 2012-8-16 13:40
是的 开了 没办法 用得到 肿么办呀

怎么会没办法,不行就用全局变量代替再共享。
如果开大的局部变量,在这些函数互相调用的时候会累加直到溢出的。

出0入0汤圆

 楼主| 发表于 2012-8-20 11:32:40 | 显示全部楼层
linucos 发表于 2012-8-16 13:43
如果能确定溢出,那分析下原因,解决问题就简单了吧!

废话 就是因为不知道原因 怎么处理呀

出0入0汤圆

 楼主| 发表于 2012-8-20 11:33:10 | 显示全部楼层
lusson 发表于 2012-8-16 17:51
怎么会没办法,不行就用全局变量代替再共享。
如果开大的局部变量,在这些函数互相调用的时候会累加直到 ...

你能帮我看看程序吗

出0入0汤圆

发表于 2012-8-20 11:55:01 | 显示全部楼层
啊哈,我经常溢出。。。随便开个数组100多字节的用啊

出0入0汤圆

发表于 2012-8-20 12:00:17 | 显示全部楼层
如果没办法把数组放全局,那你就设置堆栈的大小嘛,一般是在启动文件中。

可以试一试使用动态分配内存,这样方式分配的临时内存不是放在堆栈中。

出0入0汤圆

 楼主| 发表于 2012-8-20 12:50:51 | 显示全部楼层
jackiezeng 发表于 2012-8-20 12:00
如果没办法把数组放全局,那你就设置堆栈的大小嘛,一般是在启动文件中。

可以试一试使用动态分配内存,这 ...

具体怎么设置堆栈的大小呀

出0入0汤圆

发表于 2012-8-20 13:14:33 | 显示全部楼层
bingbingliang 发表于 2012-8-20 12:50
具体怎么设置堆栈的大小呀

在启动文件中,你找一下,如果你写过汇编语言就知道了,一般前几句话都是设定堆栈大小。
比如说:__user_initial_stackheap

                 LDR     R0, =  Heap_Mem
                 LDR     R1, =(Stack_Mem + Stack_Size)
                 LDR     R2, = (Heap_Mem +  Heap_Size)
                 LDR     R3, = Stack_Mem
                 BX      LR

                 ALIGN

                 ENDIF

                 END

不同的编译环境,不同的单片机是不同的,,你用的是神马型号? 不妨把启动文件上传,看看,

出0入0汤圆

 楼主| 发表于 2012-8-20 13:30:30 | 显示全部楼层
jackiezeng 发表于 2012-8-20 13:14
在启动文件中,你找一下,如果你写过汇编语言就知道了,一般前几句话都是设定堆栈大小。
比如说:__user_ ...

我用的是C语言 也可以处理堆栈吗

出0入0汤圆

发表于 2012-8-20 15:33:35 | 显示全部楼层
bingbingliang 发表于 2012-8-20 13:30
我用的是C语言 也可以处理堆栈吗

C语言的启动文件也是汇编语言的,,,你先找找你工程中的启动文件,,,这个不是你自己写,可能是C编译器自己生成的。

出0入0汤圆

发表于 2012-8-20 15:44:07 | 显示全部楼层
if (used_ram < mcu_ram)
  设置编译器stack;
else
  也个熊了;

出0入0汤圆

发表于 2012-8-20 17:04:55 | 显示全部楼层
bingbingliang 发表于 2012-8-20 11:32
废话 就是因为不知道原因 怎么处理呀

你怎么知道堆栈溢出?
你能听明白别人说什么再”废话“吗?

出20入22汤圆

发表于 2012-8-20 17:29:24 | 显示全部楼层
C语言编写程序会有堆栈溢出?你是RAM不够吧?

出0入0汤圆

发表于 2012-8-20 18:16:12 | 显示全部楼层
http://www.sspic.com/htm3/216920.htm     看看是否对你有帮助

出0入0汤圆

发表于 2012-8-20 22:52:58 | 显示全部楼层
求助 谁知道单片机堆栈溢出怎么处理呀


write sensible code.

出0入0汤圆

 楼主| 发表于 2012-8-21 09:12:44 | 显示全部楼层
zr631968070 发表于 2012-8-21 00:34
这方面还不是很了解啊。。。哎!

没话说 别找话说

出0入0汤圆

 楼主| 发表于 2012-8-21 09:13:59 | 显示全部楼层
luguobing 发表于 2012-8-20 18:16
http://www.sspic.com/htm3/216920.htm     看看是否对你有帮助

O(∩_∩)O谢谢

出0入0汤圆

发表于 2013-4-12 18:02:51 | 显示全部楼层
1、增大堆栈
2、精简代码

出0入0汤圆

发表于 2013-4-12 23:09:07 | 显示全部楼层
jackiezeng 发表于 2012-8-20 12:00
如果没办法把数组放全局,那你就设置堆栈的大小嘛,一般是在启动文件中。

可以试一试使用动态分配内存,这 ...

我记着动态内存是放在堆里。局部变量是栈里。临时内存是哪里?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 08:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表