打印

请教一个关于keil处理SP问题

[复制链接]
2379|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jack.king|  楼主 | 2010-10-11 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jack.king 于 2010-10-11 09:45 编辑

请教一个关于keil处理SP问题
  很久没有用汇编了,近来发现SP 值很重要!一般keil加入.a51文件后,MCU复位后SP会给一个值,(这个值不是0x07,是经过A51计算后的)请问这个值,是否是最安全的值,还是需要变大点!

相关帖子

沙发
ayb_ice| | 2010-10-11 09:55 | 只看该作者
所有的空余变量全部分配给堆栈

使用特权

评论回复
板凳
刘前辈| | 2010-10-11 10:17 | 只看该作者
本帖最后由 刘前辈 于 2010-10-11 10:24 编辑

LZ说的不仅是汇编,C编译器规则也是一样。这个SP是经过编译器或者汇编器处理完毕全局变量和覆盖共享自动变量区域后上移的。是经过复杂内存管理算法得到的、绝对安全的。
    ——(宏汇编和C编译器结果)与用户程序员根本没关系,SP根本不可见。否则,那么多水平不一的用户程序员,都比编译器算法聪明——都来管理内存就麻烦了。编译器是绝顶专业的人做的。

          LZ说的自己管理SP,那是小汇编;那个时代(30年前)还没有51宏汇编和C51。

使用特权

评论回复
地板
jack.king|  楼主 | 2010-10-11 10:48 | 只看该作者
谢谢LS2位的热心回答,但是3L的朋友似乎没有理解我说的,我现在有个程序有59K的代码了,我之前改动SP之后出了问题,所以来问问!

使用特权

评论回复
5
刘前辈| | 2010-10-11 10:58 | 只看该作者
所以不能动SP;无论宏汇编还是C程序,SP都是编译器管理的。一个系统不能有2个管理者。

使用特权

评论回复
6
ejack| | 2010-10-11 12:29 | 只看该作者
51的栈指针是向上增长的,改大纯属自讨苦吃。
不过,如果只是略微改大SP就造成栈溢出,建议LZ还是重新捋一遍程序。

使用特权

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

本版积分规则

488

主题

2158

帖子

1

粉丝