51单片机中移植ucos的问题
本帖最后由 king1314 于 2014-1-17 16:03 编辑参照网上的移植方法移植成功了
现在在细看汇编代码
有两个地方表示不太理解
1:红色标注的地方:在从仿真堆栈中复制到硬件堆栈过程中
restore_stack:
INCDPTR
INCR0
MOVX A,@DPTR
MOV@R0,A
DJNZ R5,restore_stack //恢复堆栈到硬件堆栈
MOVSP,R0
到这里为止不是结束了吗,为什么还要执行下面红色的代码????
INCDPTR
MOVX A,@DPTR
MOV?C_XBP,A
INCDPTR
MOVX A,@DPTR
MOV?C_XBP+1,A
MOVR0,#LOW (OSRunning)
MOV@R0,#01
POPALL
SETB EA
RETI //返回pc处
2:?STACK SEGMENT IDATA
RSEG ?STACK
OSStack:
DS 40H
OSStkStart IDATA OSStack-1
定义了一个堆栈段,长度是40H
这里的OSStkStart的值移植和sp相等吗,也就是说会随着sp的变化而变化??
还是说OSStkStart就是硬件堆栈的起始地址,不会变化,
DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,继续执行下一条指令。
你没看看R5是多少??? bygreencn 发表于 2014-1-17 16:40
DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳 ...
我知道R5是堆栈入栈的长度
我的意思是对下面一段话表示不理解
INCDPTR
MOVX A,@DPTR
MOV?C_XBP,A
INCDPTR
MOVX A,@DPTR
MOV?C_XBP+1,A king1314 发表于 2014-1-17 16:49
我知道R5是堆栈入栈的长度
我的意思是对下面一段话表示不理解
烧鸡啊,你这表达能力。。。
给大点斑看看,你这点看个鬼出来 我也不明白,表达详细些呗~ 高级 楼主问题解决了吗?可以贴下代码吗?
页:
[1]