51单片机中移植ucos的问题

2020-01-22 12:05发布

本帖最后由 king1314 于 2014-1-17 16:03 编辑

参照网上的移植方法移植成功了

现在在细看汇编代码

有两个地方表示不太理解

1:红 {MOD}标注的地方:在从仿真堆栈中复制到硬件堆栈过程中
restore_stack:   
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack   //恢复堆栈到硬件堆栈
        MOV  SP,R0

到这里为止不是结束了吗,为什么还要执行下面红 {MOD}的代码????
        INC  DPTR
       MOVX A,@DPTR
        MOV  ?C_XBP,A  
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP+1,A
        
       MOV  R0,#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就是硬件堆栈的起始地址,不会变化,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
bygreencn
1楼-- · 2020-01-22 17:49
 精彩回答 2  元偷偷看……
king1314
2楼-- · 2020-01-22 23:34
bygreencn 发表于 2014-1-17 16:40
DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳 ...

我知道R5是堆栈入栈的长度

我的意思是对下面一段话表示不理解
INC  DPTR
       MOVX A,@DPTR
        MOV  ?C_XBP,A  
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP+1,A  
bygreencn
3楼-- · 2020-01-23 00:23
king1314 发表于 2014-1-17 16:49
我知道R5是堆栈入栈的长度

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

烧鸡啊,你这表达能力。。。
给大点斑看看,你这点看个鬼出来
奮闘ing
4楼-- · 2020-01-23 03:04
我也不明白,表达详细些呗~
z350126876
5楼-- · 2020-01-23 08:57
高级                  
10xjzheng
6楼-- · 2020-01-23 09:37
 精彩回答 2  元偷偷看……

一周热门 更多>