[经验分享] 【分享】Keil C51里关于堆栈指针的处理

[复制链接]
12911|32
甲、乙、丙 发表于 2010-9-29 10:38 | 显示全部楼层
LZ英明……
hificwc 发表于 2012-3-8 22:35 | 显示全部楼层
:handshake收藏
ABCDELF 发表于 2013-2-6 15:35 | 显示全部楼层
hawksabre 发表于 2013-2-7 20:01 | 显示全部楼层
好资料   需要顶一个    呵呵
panamatw 发表于 2014-8-18 09:09 | 显示全部楼层
panamatw 发表于 2014-8-28 08:51 | 显示全部楼层
ayb_ice 发表于 2014-8-29 15:52 | 显示全部楼层
本帖最后由 ayb_ice 于 2014-8-29 15:54 编辑

修改下堆栈大小定义就可以了

只是默认只要有1个字节就不会报错而已,事实上片内没有使用的IDATA都是堆栈
gxx9203 发表于 2014-9-2 20:57 | 显示全部楼层
51还是有长的路要走呀。
demonguy 发表于 2014-9-4 00:54 | 显示全部楼层
我来挖个坟..楼主似乎理解错了,栈只有1个字节是KEIL故意,由于51的片内内存很小只有256bytes,所以KEIL在编译的时候从来就不会把局部变量往栈里放,而是放在一个特定的内存地址.除非你显示的声明函数是可重入的...
可以参考这篇**
google搜索 KEIL The Call Tree ,第一条就有
幸福至上 发表于 2014-11-27 12:57 | 显示全部楼层
嗯,好东西,最近也在使用Keil C51,这个BUG太恐怖了,足够玩死人的,以后最好编译完之后检查一下。我也太相信Keil了。。不过堆栈空间到底需要多少长度呢?楼主所说的是堆栈空间要保存R0~R7寄存器,那么至少也得8个Byte了。。。具体的还待研究
幸福至上 发表于 2014-11-27 20:53 | 显示全部楼层
demonguy 发表于 2014-9-4 00:54
我来挖个坟..楼主似乎理解错了,栈只有1个字节是KEIL故意,由于51的片内内存很小只有256bytes,所以KEIL在编译 ...

是的,子函数的局部变量和传入参数是放在data_group和bit_group类似的地方的。而这些Group所存放的位置和Keil C51选择的编译模式有关。在Large模式下,会被放置在xdata 区域去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部