打印
[uCOS/RTOS]

ucosii移植的问题

[复制链接]
559|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我学习ucosii,试图把ucosii移植到51单片机上。
#if OS_TASK_CREATE_EN > 0u
INT8U  OSTaskCreate (void   (*task)(void *p_arg),
                     void  idata  *p_arg,
                     OS_STK idata *ptos,
                     INT8U    prio)reentrant
{
    OS_STK  idata  *psp;
    INT8U      err;
//#if OS_CRITICAL_METHOD == 3u                 /* Allocate storage for CPU status register               */
//    OS_CPU_SR  cpu_sr = 0u;
//#endif



#if OS_ARG_CHK_EN > 0u
    if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
        return (OS_PRIO_INVALID);
    }
#endif
    OS_ENTER_CRITICAL();
    if (OSIntNesting > 0u) {                 /* Make sure we don't create the task from within an ISR  */
        OS_EXIT_CRITICAL();
        //return (OS_TASK_CREATE_ISR);
                return (OS_TASK_DEL_ERR);
    }
    if (OSTCBPrioTbl[prio] == (OS_TCB idata *)0) { /* Make sure task doesn't already exist at this priority  */
        OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ...  */
                                             /* ... the same thing until task is created.              */
        OS_EXIT_CRITICAL();
        psp = OSTaskStkInit(task, p_arg, ptos, 0u);             /* Initialize the task's stack         */
        err = OS_TCBInit(prio, psp, (OS_STK *)0, 0u, 0u, (void *)0, 0u);
        if (err == OS_ERR_NONE) {
            if (OSRunning == OS_TRUE) {      /* Find highest priority task if multitasking has started */
                OS_Sched();
            }
        } else {
            OS_ENTER_CRITICAL();
            OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
            OS_EXIT_CRITICAL();
        }
        return (err);
    }
    OS_EXIT_CRITICAL();
    return (OS_ERR_PRIO_EXIST);
}
#endif
#if OS_TASK_CREATE_EN > 0u
INT8U         OSTaskCreate            (void           (*task)(void *p_arg),
                                       void        idata    *p_arg,
                                       OS_STK      idata    *ptos,
                                       INT8U            prio)reentrant;
#endif
#define task1prio        2
#define task2prio        4
sbit P10 =P1^0;
sbit P11 =P1^1;

INT8U data task1stk[stksize];
INT8U idata task2stk[stksize];

void max(void)reentrant ;


void task1(void);
void task2(void);

void main(void)
{
        Time_Init ();
        OSInit();
        OSTaskCreate(task1,(void* )0,task1stk,task1prio);
        //OSTaskCreate(task1,(void * )0,&task1stk[stksize-1],2);
        OSTaskCreate(task2,(void * )0,task2stk,task2prio);
        OSStart();
       

}

void task1(void)
{


while(1)
       
{
        P10 = !P10;
        max();
        OSTimeDlyHMSM(0,0,1,0);

}

}

void task2(void)
{

while(1)
       
{
       
        P11 = !P11;
        OSTimeDlyHMSM(0,0,2,0);

}

}

void max(void)reentrant
{
INT32U i;
        i++;

}
可是编译有两个不对劲的警告

产生警告的语句如下:
OSTaskCreate(task1,(void* )0,task1stk,task1prio);
        //OSTaskCreate(task1,(void * )0,&task1stk[stksize-1],2);
        OSTaskCreate(task2,(void * )0,task2stk,task2prio);
请问高手,哪里出了问题?如何解决?谢谢!

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

347

主题

3092

帖子

7

粉丝