在汇编里需要重新指定栈顶指针,但如果在c51初始化寄存器的子函数里指定栈顶指针,则程序将一直在子函数里循环,跳不出来,为什么?郁闷
回复(10) 2004-12-06 17:29 来自版块 - Keil C 使用
表情
computer00嘿嘿,我还在51上写了个操作系统呢,直接操作SP。 去我的BLOG里找来玩玩吧。(2007-09-10 21:53)
walnutcy看完了才发现是好老的贴子,我就不说怎么设SP了, 自己写一个51的启动的代码就可以了,我在keilc51下完整地用c+嵌入式汇编完成过工程,采用嵌入式汇编处理sp,进行任务切换, 专用来处理堆栈,嘻嘻,,,一个简易的任务调度,,(2007-08-19 15:47)
computer00知道函数调用过程吗?函数调用过程时,将返回地址压入堆栈,现在你跑到函数里面把堆栈指针给改了,那它怎么正确返回啊?返回地址都不对了,你这个比过河拆桥更严重~~~~~~~~ (2007-03-28 21:50)
liuzheng2k去看看STARTUP.A51文件(2005-01-11 15:04)
sx_wjy不用设置,编译器会自动设置得,你看一下编译后的汇编代码就知道了?经常看看编译后的汇编代码。 (2005-01-09 16:52)
lsn_061是的,一般不需要,除非发生溢出,才适当清零,程序大了才这样// [编辑 - 12/23/04 by lsn_061](2004-12-23 15:58)
guyx不用设置,会自动设置得 (2004-12-23 10:27)
lbcat 可以是可以指定,不过你如果要在子程序里改变的话,那么新指向的堆栈结构必须与原来子程序入栈的时候相同(而且要可以预料得到程序得流向),否则程序就跑飞了…………(2004-12-14 09:35)
sunnysky并且你犯了一个致命错误! SP指针不能在子函数里设置!原因是。。。。呵呵!(2004-12-08 15:09)
sunnysky一般来讲,KEIL C51不需要用户设置SP!它自己会根据内部ROM使用情况来初始SP!(2004-12-08 14:58)

返回顶部