king1314 发表于 2014-1-17 15:59:38

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就是硬件堆栈的起始地址,不会变化,

bygreencn 发表于 2014-1-17 16:40:37

DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,继续执行下一条指令。
你没看看R5是多少???

king1314 发表于 2014-1-17 16:49:04

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

bygreencn 发表于 2014-1-17 16:52:49

king1314 发表于 2014-1-17 16:49
我知道R5是堆栈入栈的长度

我的意思是对下面一段话表示不理解


烧鸡啊,你这表达能力。。。
给大点斑看看,你这点看个鬼出来

奮闘ing 发表于 2014-1-17 17:23:21

我也不明白,表达详细些呗~

z350126876 发表于 2014-1-17 19:28:39

高级                  

10xjzheng 发表于 2014-10-13 20:25:31

楼主问题解决了吗?可以贴下代码吗?
页: [1]
查看完整版本: 51单片机中移植ucos的问题