发新帖我要提问
12
返回列表
打印
[经验分享]

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

[复制链接]
楼主: suoma
手机看帖
扫描二维码
随时随地手机跟帖
21
LZ英明……

使用特权

评论回复
22
hificwc| | 2012-3-8 22:35 | 只看该作者
:handshake收藏

使用特权

评论回复
23
ABCDELF| | 2013-2-6 15:35 | 只看该作者
有用

使用特权

评论回复
24
hawksabre| | 2013-2-7 20:01 | 只看该作者
好资料   需要顶一个    呵呵

使用特权

评论回复
25
panamatw| | 2014-8-18 09:09 | 只看该作者
謝謝

使用特权

评论回复
26
panamatw| | 2014-8-28 08:51 | 只看该作者
謝謝

使用特权

评论回复
27
ayb_ice| | 2014-8-29 15:52 | 只看该作者
本帖最后由 ayb_ice 于 2014-8-29 15:54 编辑

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

只是默认只要有1个字节就不会报错而已,事实上片内没有使用的IDATA都是堆栈

使用特权

评论回复
28
gxx9203| | 2014-9-2 20:57 | 只看该作者
51还是有长的路要走呀。

使用特权

评论回复
29
demonguy| | 2014-9-4 00:54 | 只看该作者
我来挖个坟..楼主似乎理解错了,栈只有1个字节是KEIL故意,由于51的片内内存很小只有256bytes,所以KEIL在编译的时候从来就不会把局部变量往栈里放,而是放在一个特定的内存地址.除非你显示的声明函数是可重入的...
可以参考这篇**
google搜索 KEIL The Call Tree ,第一条就有

使用特权

评论回复
30
幸福至上| | 2014-11-27 12:57 | 只看该作者
嗯,好东西,最近也在使用Keil C51,这个BUG太恐怖了,足够玩死人的,以后最好编译完之后检查一下。我也太相信Keil了。。不过堆栈空间到底需要多少长度呢?楼主所说的是堆栈空间要保存R0~R7寄存器,那么至少也得8个Byte了。。。具体的还待研究

使用特权

评论回复
31
幸福至上| | 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 区域去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则