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

📄 ucos186c.c

📁 比较老的ucos最初的版本
💻 C
字号:
/*
***********************************************************
*                      UCOS186C.C
*               80186/80188 Specific Code
*                  SMALL MEMORY MODEL
***********************************************************
*                     INCLUDE FILES
***********************************************************
*/
#include "INCLUDES.H"
#pragma  inline
/*
***********************************************************
*                    CREATE A TASK
***********************************************************
*/

UBYTE OSTaskCreate(void (far *task)(void *dptr), void  *data, void  *pstk, UBYTE  p)
{
    OS_TCB *ptr;
    UWORD  *stk;


    if (OSTCBPrioTbl[p] == (OS_TCB *)0) {                       /* Avoid creating task if already exist */
        ptr              = OSTCBGetFree();
        ptr->OSTCBPrio   = (UBYTE)p;
        ptr->OSTCBStat   = OS_STAT_RDY;
        ptr->OSTCBDly    = 0;

        stk              = (UWORD *)pstk;                       /* 80186/80188 Small Model              */
        *--stk           = (UWORD)FP_OFF(data);
        *--stk           = (UWORD)FP_SEG(task);
        *--stk           = (UWORD)FP_OFF(task);
        *--stk           = (UWORD)0x0200;                       /* PSW = Int. En.                       */
        *--stk           = (UWORD)FP_SEG(task);
        *--stk           = (UWORD)FP_OFF(task);
        *--stk           = (UWORD)0x0000;                       /* AX = 0                               */
        *--stk           = (UWORD)0x0000;                       /* CX = 0                               */
        *--stk           = (UWORD)0x0000;                       /* DX = 0                               */
        *--stk           = (UWORD)0x0000;                       /* BX = 0                               */
        *--stk           = (UWORD)0x0000;                       /* SP = 0                               */
        *--stk           = (UWORD)0x0000;                       /* BP = 0                               */
        *--stk           = (UWORD)0x0000;                       /* SI = 0                               */
        *--stk           = (UWORD)0x0000;                       /* DI = 0                               */
        *--stk           = (UWORD)0x0000;                       /* ES = 0                               */
        ptr->OSTCBStkPtr = (void *)stk;                         /* Load SP in TCB                       */
        OSTCBPrioTbl[p]  = ptr;
        OS_ENTER_CRITICAL();
        ptr->OSTCBNext        = OSTCBList;
        ptr->OSTCBPrev        = (OS_TCB *)0;
        if (OSTCBList != (OS_TCB *)0) {                         /* Rev. A, This line was missing        */
            OSTCBList->OSTCBPrev = ptr;
        }
        OSTCBList             = ptr;
        OSRdyGrp             |= OSMapTbl[p >> 3];
        OSRdyTbl[p >> 3]     |= OSMapTbl[p & 0x07];
        OS_EXIT_CRITICAL();
        if (OSRunning) {
            OSSched();
        }
        return (OS_NO_ERR);
    } else {
        return (OS_PRIO_EXIST);
    }
}

⌨️ 快捷键说明

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