wangshihu
论坛版主
论坛版主
  • 注册日期2003-12-31
  • 最后登录2012-03-26
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望96点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:10291回复:10

c51里堆栈指针SP如何处理?

楼主#
更多 发布于:2004-12-06 17:29
在汇编里需要重新指定栈顶指针,但如果在c51初始化寄存器的子函数里指定栈顶指针,则程序将一直在子函数里循环,跳不出来,为什么?郁闷

sunnysky
驱动牛犊
驱动牛犊
  • 注册日期2004-07-30
  • 最后登录2006-07-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-08 14:58
一般来讲,KEIL C51不需要用户设置SP!它自己会根据内部ROM使用情况来初始SP!
诚实努力,不懈追求! *************************** 承接单片机软件(C)项目开发 QQ:397912594 E-mail:lshqwork@163.com(不回答问题)
sunnysky
驱动牛犊
驱动牛犊
  • 注册日期2004-07-30
  • 最后登录2006-07-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-08 15:09
并且你犯了一个致命错误!
SP指针不能在子函数里设置!原因是。。。。呵呵!
诚实努力,不懈追求! *************************** 承接单片机软件(C)项目开发 QQ:397912594 E-mail:lshqwork@163.com(不回答问题)
lbcat
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-09-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-14 09:35
 可以是可以指定,不过你如果要在子程序里改变的话,那么新指向的堆栈结构必须与原来子程序入栈的时候相同(而且要可以预料得到程序得流向),否则程序就跑飞了…………
guyx
驱动牛犊
驱动牛犊
  • 注册日期2002-01-16
  • 最后登录2004-12-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-23 10:27
不用设置,会自动设置得

guyx
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-23 15:58
是的,一般不需要,除非发生溢出,才适当清零,程序大了才这样//

[编辑 -  12/23/04 by  lsn_061]
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
sx_wjy
驱动牛犊
驱动牛犊
  • 注册日期2003-12-19
  • 最后登录2008-06-12
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-09 16:52
不用设置,编译器会自动设置得,你看一下编译后的汇编代码就知道了?经常看看编译后的汇编代码。
liuzheng2k
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-11 15:04
去看看STARTUP.A51文件
computer00
驱动小牛
驱动小牛
  • 注册日期2004-09-27
  • 最后登录2009-08-22
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望120点
  • 贡献值0点
  • 好评度110点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-03-28 21:50
知道函数调用过程吗?函数调用过程时,将返回地址压入堆栈,现在你跑到函数里面把堆栈指针给改了,那它怎么正确返回啊?返回地址都不对了,你这个比过河拆桥更严重~~~~~~~~
博客Http://computer00.21ic.org
walnutcy
驱动牛犊
驱动牛犊
  • 注册日期2005-12-08
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望21点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-19 15:47
看完了才发现是好老的贴子,我就不说怎么设SP了,


自己写一个51的启动的代码就可以了,我在keilc51下完整地用c+嵌入式汇编完成过工程,采用嵌入式汇编处理sp,进行任务切换,


专用来处理堆栈,嘻嘻,,,一个简易的任务调度,,
computer00
驱动小牛
驱动小牛
  • 注册日期2004-09-27
  • 最后登录2009-08-22
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望120点
  • 贡献值0点
  • 好评度110点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-09-10 21:53
嘿嘿,我还在51上写了个操作系统呢,直接操作SP。

去我的BLOG里找来玩玩吧。
博客Http://computer00.21ic.org
游客

返回顶部