搜索
bottom↓
回复: 39

求助 如果单片机已经选定 现在的程序堆栈溢出了 肿么办呢

[复制链接]

出0入0汤圆

发表于 2012-8-16 13:43:27 | 显示全部楼层 |阅读模式
求助 如果单片机已经选定 现在的程序堆栈溢出了 肿么办呢

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-8-16 13:44:51 | 显示全部楼层
优化程序

出0入0汤圆

 楼主| 发表于 2012-8-16 13:59:48 | 显示全部楼层
xywap 发表于 2012-8-16 13:44
优化程序

怎么优化呀

出0入0汤圆

发表于 2012-8-16 14:01:15 | 显示全部楼层
有些函数调用改为宏
局部变量尽量减少

出0入0汤圆

发表于 2012-8-16 14:03:28 | 显示全部楼层
程序设计的时候尽量使用与单片位位宽相同的变量。减少局部变量,减少函数调用深度

出0入0汤圆

 楼主| 发表于 2012-8-16 14:10:27 | 显示全部楼层
lpc1788 发表于 2012-8-16 14:03
程序设计的时候尽量使用与单片位位宽相同的变量。减少局部变量,减少函数调用深度 ...

您说的太深奥了 我能把程序发给您 您帮我瞅瞅吗

出0入0汤圆

发表于 2012-8-16 14:13:23 | 显示全部楼层
把变量定义在地址上  然后去地址上取值

出0入0汤圆

发表于 2012-8-16 14:40:33 | 显示全部楼层
减少函数调用

出0入0汤圆

 楼主| 发表于 2012-8-16 14:49:35 | 显示全部楼层
lg88 发表于 2012-8-16 14:40
减少函数调用

O(∩_∩)O谢谢

出0入0汤圆

发表于 2012-8-16 14:50:51 | 显示全部楼层
修改堆栈大小不OK了。。。用什么单片机啊。。。

出0入0汤圆

发表于 2012-8-16 15:41:57 | 显示全部楼层
call 了又call 再加中断,多了就溢出了呗。减少子程序。不重复使用的功能尽量不要写成子函数

出0入0汤圆

 楼主| 发表于 2012-8-16 16:05:14 | 显示全部楼层
myqiang1990 发表于 2012-8-16 14:50
修改堆栈大小不OK了。。。用什么单片机啊。。。

这个可以修改吗 现在是用的at89s53

出0入0汤圆

发表于 2012-8-16 16:35:34 | 显示全部楼层
bingbingliang 发表于 2012-8-16 16:05
这个可以修改吗 现在是用的at89s53

是不是美女啊。。。是美女我就答你....

出0入0汤圆

发表于 2012-8-16 16:54:56 | 显示全部楼层
Keil里面软件仿真,留好备份,剩下的就是想怎么折腾就怎么折腾了,直到堆栈不溢出为止!

出0入0汤圆

发表于 2012-8-16 17:28:54 | 显示全部楼层
启动代码中改堆栈大小就OK 了!

出0入0汤圆

 楼主| 发表于 2012-8-16 17:41:59 | 显示全部楼层
myqiang1990 发表于 2012-8-16 16:35
是不是美女啊。。。是美女我就答你....

呵呵 大哥哥见色起意 无色不欢 头像就是我 你觉得是就答 觉得不是大可置之不理

出0入0汤圆

 楼主| 发表于 2012-8-16 17:43:19 | 显示全部楼层
xf331785508 发表于 2012-8-16 17:28
启动代码中改堆栈大小就OK 了!

哦? 是吗 怎么改呢 具体?

出0入0汤圆

发表于 2012-8-16 21:25:32 来自手机 | 显示全部楼层
路过学习一下!!!!!!

出0入0汤圆

发表于 2012-8-16 21:34:41 | 显示全部楼层
myqiang1990 发表于 2012-8-16 16:35
是不是美女啊。。。是美女我就答你....

楼主明显美女啊 怎么不回答啊~ 还等着学呢
另外 你也是90年的? 都金牌会员了,我还新手呢~

出0入0汤圆

发表于 2012-8-17 19:14:07 | 显示全部楼层
是汇编语言可以改得,C语言好像不能改吧,是自动确定的

出0入0汤圆

 楼主| 发表于 2012-8-17 20:46:49 | 显示全部楼层
lg88 发表于 2012-8-17 19:14
是汇编语言可以改得,C语言好像不能改吧,是自动确定的

哦 谢谢美女

出0入0汤圆

发表于 2012-8-17 22:44:57 | 显示全部楼层
路过学习一下!!

出0入0汤圆

发表于 2012-8-20 18:44:04 | 显示全部楼层
;------------------------------------------------------------------------------
;
;  Reentrant Stack Initilization
;
;  The following EQU statements define the stack pointer for reentrant
;  functions and initialized it:
;
;  Stack Space for reentrant functions in the SMALL model.
IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.
IBPSTACKTOP     EQU     0FFfH+1  ; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the LARGE model.      
XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.
XBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the COMPACT model.   
PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.
PBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
;
;------------------------------------------------------------------------------



楼主试试是不是这里可以改

出0入0汤圆

发表于 2012-8-20 18:46:05 | 显示全部楼层
STARTUP.A51  文件

出0入0汤圆

 楼主| 发表于 2012-8-21 09:13:13 | 显示全部楼层
luguobing 发表于 2012-8-20 18:46
STARTUP.A51  文件

哦 O(∩_∩)O谢谢

出0入0汤圆

发表于 2012-8-21 09:22:51 | 显示全部楼层
1.函数里尽量少再次嵌套函数,保证单片机一次只执行一个,最多保留一个返回值,然后调用下一个函数继续处理返回值。
2.入口参数尽量的少(不过我还没搞清入口参数和需要堆栈数量的关系)。
3.换RAM大的单片机,比如AVR的,至少512字节的空间都可以给你拿去压堆栈。
现在想到的就这么多了。

出0入0汤圆

 楼主| 发表于 2012-8-21 09:37:59 | 显示全部楼层
XA144F 发表于 2012-8-21 09:22
1.函数里尽量少再次嵌套函数,保证单片机一次只执行一个,最多保留一个返回值,然后调用下一个函数继续处理 ...

您能帮我看下程序吗

出0入0汤圆

 楼主| 发表于 2012-8-21 09:38:20 | 显示全部楼层
luguobing 发表于 2012-8-20 18:46
STARTUP.A51  文件

您能帮我看下程序吗

出0入0汤圆

 楼主| 发表于 2012-8-21 09:38:40 | 显示全部楼层
luguobing 发表于 2012-8-20 18:44
;------------------------------------------------------------------------------
;
;  Reentrant Stack ...

您能帮我看下程序吗

出0入0汤圆

发表于 2012-8-21 09:48:54 | 显示全部楼层
把你程序发到我的邮箱,晚上帮你看一下。Anjf163@qq.com

出0入0汤圆

 楼主| 发表于 2012-8-21 15:35:03 | 显示全部楼层
anjf163 发表于 2012-8-21 09:48
把你程序发到我的邮箱,晚上帮你看一下。

我加你QQ吧 你告诉我你的QQ

出0入0汤圆

发表于 2012-8-21 17:17:38 | 显示全部楼层
用stc90c516rd,容量大好多,ram不夠就可解決,lz都好美麗

出0入0汤圆

发表于 2012-8-21 19:01:26 | 显示全部楼层
bingbingliang 发表于 2012-8-21 09:38
您能帮我看下程序吗

马化腾:  14零4538二五7      发到马化腾邮箱就行

出0入0汤圆

发表于 2012-8-21 19:13:10 | 显示全部楼层
可以改一下设置

出0入0汤圆

发表于 2012-8-21 19:13:43 | 显示全部楼层
就是你是keil编译器吗

出0入0汤圆

发表于 2012-8-21 20:05:58 | 显示全部楼层
keil的话···把某些变量扔XDATA去吧····静态的加上static·····

出20入22汤圆

发表于 2012-8-21 20:14:35 | 显示全部楼层
C语言写程序会产生堆栈溢出?

出0入131汤圆

发表于 2012-8-21 20:46:39 | 显示全部楼层
楼主你是怎么确定你的程序堆栈溢出了?

出0入0汤圆

发表于 2012-8-22 09:43:50 | 显示全部楼层
本帖最后由 anjf163 于 2012-8-22 19:30 编辑
bingbingliang 发表于 2012-8-21 15:35
我加你QQ吧 你告诉我你的QQ


.......

出0入0汤圆

发表于 2012-8-25 12:31:50 | 显示全部楼层
c51 程序优化要领
45445.pdf

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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

GMT+8, 2024-7-24 00:30

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

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