UCOS 51移植 特殊指针问题

2020-02-01 16:30发布

       我是在http://www.amobbs.com/forum.php?mod=viewthread&tid=3396563这里看的ucos 51移植的代码。然后在移植汇编的时候有下面的代码

;获得堆栈长度和起址
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A     ;获得堆栈长度        
   
        ;OSTCBCur ===> DPTR  获得当前TCB指针,详见C51.PDF第178页
        MOV  R0,#LOW (OSTCBCur) ;获得OSTCBCur指针低地址,指针占3字节。+0类型+1高8位数据+2低8位数据
        INC  R0
        MOV  DPH,@R0    ;全局变量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
   
其中的OSTCBCur是申明为IDATA类型的指针变量的。它应该是一个特殊的指针和普通指针有所区别的。普通指针是3个字节,而特殊指针是2个字节的。 5AN()YP3$_{Y$LE](5C8PW1.jpg (280.96 KB, 下载次数: 0) 下载附件 2012-11-12 11:20 上传
上图就是C51上说的。。。请大神们指点一下。。。解开我心中的迷惑。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
rechan886
1楼-- · 2020-02-01 20:04
怎么没人解答呢???自己顶一下。。。
hell-prototypes
2楼-- · 2020-02-01 22:01
我看半天,怎么看不出来你的迷惑是什么。。。
rechan886
3楼-- · 2020-02-02 00:21
 精彩回答 2  元偷偷看……
rechan886
4楼-- · 2020-02-02 05:18
    ;OSTCBCur ===> DPTR  获得当前TCB指针,详见C51.PDF第178页
        MOV  R0,#LOW (OSTCBCur) ;获得OSTCBCur指针低地址,指针占3字节。+0类型+1高8位数据+2低8位数据
        INC  R0
        MOV  DPH,@R0    ;全局变量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
就是上面他说OSTCBCur指针是三个字节啊。。我认为是两个字节。 直接就是1高8位数据+2低8位数据啊。。。
hell-prototypes
5楼-- · 2020-02-02 10:14
OSTCBCur是放在IDATA空间里面的指针变量,但它是通用型指针,所以OSTCBCur是要占用3个字节空间。
如果OSTCBCur是指向IDATA的指针那么就只要占用两个字节。

rechan886
6楼-- · 2020-02-02 11:34
当时我在ucos.h的声明中看到的是
OS_EXT  idata OS_TCB     *OSTCBCur;                     /* Pointer to currently running TCB         */

在keil中说明
   long * idata varptr; /* generic ptr stored in idata */  
   long code *powtab; /* ptr to long(s) in code */   
这两者有什么区别呢???   

一周热门 更多>