⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task16.c

📁 ucos在所有cpu下的移植范例
💻 C
字号:
/*	  
**************************************************************************
*                                 uCOS
*         Microcomputer Real-Time Multitasking Operating System
*
*          (c) Copyright 1992, Jean J. Labrosse, Plantation, FL
*                           All Rights Reserved
*
*
*                        MC68HC16 Specific code
*
* File : task16.C
* By   : Gary Schneider
**************************************************************************
*/

#include "DEFS.H"
#include "UCOS.H"

/*
**************************************************************************
*                         CREATE A TASK
**************************************************************************
*/
UBYTE OSTaskCreate( void (*task) (void), void *pstk, UBYTE p)
{													 
    UWORD *stk;
    UBYTE  err;

    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[p] == (OS_TCB *)0) {   /* Make sure task doesn't already exist at this priority   */
        OS_EXIT_CRITICAL();
        stk    = (UWORD *) pstk;            /* Load stack pointer                                      */
                                            /* Load the PC                                             */
                                            /* RTI subtracts 6 bytes (3 words) from PC due to pipeline */
        *--stk = (UWORD) (((ULONG) task)+4);
        *--stk = (UWORD) (((ULONG) task)>>16);  /* Load PK onto stack                                  */
        *--stk = (UWORD) ((ULONG) task);        /* Place-holder since SP gets                          */
			                        /* incr. by 2 by an RTI                                */
        *--stk = (UWORD)0x0000;             /* Accumulator D = 0                                       */
        *--stk = (UWORD)0x0000;             /* Accumulator E = 0                                       */
        *--stk = (UWORD)0x0000;             /* IX = 0                                                  */
        *--stk = (UWORD)0x0000;             /* IY = 0                                                  */
        *--stk = (UWORD)0x0000;             /* IZ = 0                                                  */
        *--stk = (UWORD)0x0000;             /* XK,YK,ZK = 0                                            */
        err = OSTCBInit(p, (void *)stk);    /* Get and initialize a TCB                                */
        if (err == OS_NO_ERR) {
            if (OSRunning) {                /* Find highest priority task if multitasking has started  */
                OSSched();
            }
        }
        return (err);
    } else {
        OS_EXIT_CRITICAL();
        return (OS_PRIO_EXIST);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -