读书人

!UCOS移植OSTaskStkInit 的有关问题!

发布时间: 2012-02-16 21:30:36 作者: rapoo

高手请进!UCOS移植OSTaskStkInit 的问题!! 在线等........
麻烦高手给看看(1)地方有没有问题,
主要是用来取函数首地址。

C/C++ code
OS_STK  *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt){    OS_STK  *psoft_stk;    OS_STK  *phard_stk;                      /* Temp. variable used for setting up AVR hardware stack    */    INT16U  tmp;    opt          = opt;                     /* 'opt' is not used, prevent warning                       */    psoft_stk    = (INT8U *)ptos;    phard_stk    = (INT8U *)ptos                 - OSTaskStkSize            /* Task stack size                                          */                 + OSTaskHardStkSize;       /* AVR return stack ("hardware stack")                      */    tmp          = *(INT16U const *)task;    //-------------------------(1)    *phard_stk-- = (INT8U)tmp;              /* Put task start address on top of "hardware stack"        */    *phard_stk-- = (INT8U)(tmp >> 8);    *psoft_stk-- = (INT8U)0x00;             /* R0    = 0x00                                             */............    *psoft_stk-- = (INT8U)0x80;             /* SREG  = Interrupts enabled                               */    tmp          = (INT16U)phard_stk;    *psoft_stk-- = (INT8U)(tmp >> 8);       /* SPH                                                      */    *psoft_stk   = (INT8U) tmp;             /* SPL                                                      */    return ((void *)psoft_stk);}


[解决办法]
同意楼上,task只是一个地址值而已。
[解决办法]
那就这样子
tmp = (INT16U const)(void*)task;
如果编译不过的话
[解决办法]
task已经是指针了。前面加(INT16U CONST)就是强制转换为INT16U类型了。

读书人网 >C语言

热点推荐