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

📄 ucos_ii.i

📁 ucos-II 基于pc的范例 中文解释 包涵全部源码
💻 I
📖 第 1 页 / 共 3 页
字号:





#line 56 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"















































#line 120 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"






















#line 153 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"





















#line 188 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"
















#line 218 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"














#line 24 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"

#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"







#line 27 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"












#line 43 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"






#line 64 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"



























#line 108 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"










































#line 161 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"





















#line 193 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"















#line 233 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"


























































#line 305 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"


































#line 355 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"



































#line 404 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_q.c"
































#line 25 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"







#line 38 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

INT16U OSSemAccept (OS_EVENT *pevent)
{
    INT16U cnt;


 asm {PUSHF; CLI};
    if (pevent->OSEventType != 3) {
 asm POPF;
        return (0);
    }
    cnt = pevent->OSEventCnt;
    if (cnt > 0) {
        pevent->OSEventCnt--;
    }
 asm POPF;
    return (cnt);
}



#line 74 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

OS_EVENT *OSSemCreate (INT16U cnt)
{
    OS_EVENT *pevent;


 asm {PUSHF; CLI};
    pevent = OSEventFreeList;
    if (OSEventFreeList != (OS_EVENT *)0) {
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }
 asm POPF;
    if (pevent != (OS_EVENT *)0) {
        pevent->OSEventType = 3;
        pevent->OSEventCnt  = cnt;
        OSEventWaitListInit(pevent);
    }
    return (pevent);
}



#line 123 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
{
 asm {PUSHF; CLI};
    if (pevent->OSEventType != 3) {
 asm POPF;
        *err = 1;
    }
    if (pevent->OSEventCnt > 0) {
        pevent->OSEventCnt--;
 asm POPF;
        *err = 0;
    } else if (OSIntNesting > 0) {
 asm POPF;
        *err = 2;
    } else {
        OSTCBCur->OSTCBStat    |= 0x01;
        OSTCBCur->OSTCBDly      = timeout;
        OSEventTaskWait(pevent);
 asm POPF;
        OSSched();
 asm {PUSHF; CLI};
        if (OSTCBCur->OSTCBStat & 0x01) {
            OSEventTO(pevent);
 asm POPF;
            *err = 10;
        } else {
            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
 asm POPF;
            *err = 0;
        }
    }
}


#line 173 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

INT8U OSSemPost (OS_EVENT *pevent)
{
 asm {PUSHF; CLI};
    if (pevent->OSEventType != 3) {
 asm POPF;
        return (1);
    }
    if (pevent->OSEventGrp) {
        OSEventTaskRdy(pevent, (void *)0,0x01);
 asm POPF;
        OSSched();
        return (0);
    } else {
        if (pevent->OSEventCnt < 65535) {
            pevent->OSEventCnt++;
 asm POPF;
            return (0);
        } else {
 asm POPF;
            return (50);
        }
    }
}

#line 213 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_sem.c"

INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)
{
    INT8U  i;
    INT8U *psrc;
    INT8U *pdest;


 asm {PUSHF; CLI};
    if (pevent->OSEventType != 3) {
 asm POPF;
        return (1);
    }
    pdata->OSEventGrp = pevent->OSEventGrp;
    psrc              = &pevent->OSEventTbl[0];
    pdest             = &pdata->OSEventTbl[0];
    for (i = 0; i <((12) / 8 + 1); i++) {
        *pdest++ = *psrc++;
    }
    pdata->OSCnt      = pevent->OSEventCnt;
 asm POPF;
    return (0);
}

#line 26 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"

#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"






#line 26 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"


static  void  OSDummy(void);


#line 42 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"

static void  OSDummy (void)
{
}



#line 67 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"



































































#line 171 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"


INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
{
    void   *psp;
    INT8U   err;


    if (prio > 12) {
        return (42);
    }
 asm {PUSHF; CLI};
    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) {
        OSTCBPrioTbl[prio] = (OS_TCB *)1;

 asm POPF;
        psp = (void *)OSTaskStkInit(task, pdata, ptos, 0);
        err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);
        if (err == 0) {
 asm {PUSHF; CLI};
            OSTaskCtr++;
            OSTaskCreateHook(OSTCBPrioTbl[prio]);
 asm POPF;
            if (OSRunning) {
                OSSched();
            }
        } else {
 asm {PUSHF; CLI};
            OSTCBPrioTbl[prio] = (OS_TCB *)0;
 asm POPF;
        }
        return (err);
    } else {
 asm POPF;
        return (40);
    }
}



#line 273 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"
































































#line 372 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"





























































#line 476 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"



































#line 526 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"



































#line 578 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"















































#line 645 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"









































#line 699 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_task.c"

INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)
{
    OS_TCB *ptcb;


    if (prio > 12 && prio != 0xFF) {
        return (42);
    }
 asm {PUSHF; CLI};
    if (prio == 0xFF) {
        prio = OSTCBCur->OSTCBPrio;
    }
    if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {
 asm POPF;
        return (41);
    }
    *pdata = *ptcb;
 asm POPF;
    return (0);
}
#line 27 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"






#line 36 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

void OSTimeDly (INT16U ticks)
{
    if (ticks > 0) {
 asm {PUSHF; CLI};
        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
        }
        OSTCBCur->OSTCBDly = ticks;
 asm POPF;
        OSSched();
    }
}


#line 74 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
{
    INT32U ticks;
    INT16U loops;


    if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
        if (minutes > 59) {
            return (81);
        }
        if (seconds > 59) {
            return (82);
        }
        if (milli > 999) {
            return (83);
        }


        ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * 200
              + 200 * ((INT32U)milli + 500L / 200) / 1000L;
        loops = ticks / 65536L;
        ticks = ticks % 65536L;
        OSTimeDly(ticks);
        while (loops > 0) {
            OSTimeDly(32768);
            OSTimeDly(32768);
            loops--;
        }
        return (0);
    } else {
        return (84);
    }
}


#line 132 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

INT8U OSTimeDlyResume (INT8U prio)
{
    OS_TCB *ptcb;


    if (prio >= 12) {
        return (42);
    }
 asm {PUSHF; CLI};
    ptcb = (OS_TCB *)OSTCBPrioTbl[prio];
    if (ptcb != (OS_TCB *)0) {
        if (ptcb->OSTCBDly != 0) {
            ptcb->OSTCBDly  = 0;
            if (!(ptcb->OSTCBStat & 0x08)) {
                OSRdyGrp               |= ptcb->OSTCBBitY;
                OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 asm POPF;
                OSSched();
            } else {
 asm POPF;
            }
            return (0);
        } else {
 asm POPF;
            return (80);
        }
    } else {
 asm POPF;
        return (11);
    }
}


#line 177 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

INT32U OSTimeGet (void)
{
    INT32U ticks;


 asm {PUSHF; CLI};
    ticks = OSTime;
 asm POPF;
    return (ticks);
}


#line 200 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_time.c"

void OSTimeSet (INT32U ticks)
{
 asm {PUSHF; CLI};
    OSTime = ticks;
 asm POPF;
}
#line 28 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"

⌨️ 快捷键说明

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