亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ucos.c

?? ppc860平臺上移植uc OS的實例
?? C
?? 第 1 頁 / 共 5 頁
字號:
    OS_TCB *ptcb;
    UBYTE   x;
    UBYTE   y;
    UBYTE   bitx;
    UBYTE   bity;
    UBYTE   p;


    OS_ENTER_CRITICAL();
    if (pevent->OSEventGrp) {                         /* See if any task pending on mailbox            */
        y    = OSUnMapTbl[pevent->OSEventGrp];        /* Find highest prio. task waiting for message   */
        bity = OSMapTbl[y];
        x    = OSUnMapTbl[pevent->OSEventTbl[y]];
        bitx = OSMapTbl[x];
        p    = (y << 3) + x;                          /* Find the priority of the task                 */
        if ((pevent->OSEventTbl[y] &= ~bitx) == 0) {  /* Remove this task from the waiting list        */
            pevent->OSEventGrp &= ~bity;
        }
        ptcb                 =  OSTCBPrioTbl[p];      /* Point to this task's OS_TCB                   */
        ptcb->OSTCBDly       =  0;                    /* Prevent OSTimeTick() from readying task       */
        ptcb->OSTCBEventPtr  = (OS_EVENT *)0;         /* Unlink ECB from this task                     */
        ptcb->OSTCBMsg       =  msg;                  /* Send message directly to waiting task         */
        ptcb->OSTCBStat     &= ~OS_STAT_MBOX;         /* Clear bit associated with event type          */
        if (ptcb->OSTCBStat == OS_STAT_RDY) {         /* See if task is ready (could be suspended)     */
            OSRdyGrp        |=  bity;                 /* Put task in the ready to run list             */
            OSRdyTbl[y]     |=  bitx;
        }
        OS_EXIT_CRITICAL();
        OSSched();                                    /* Find highest priority task ready to run       */
        return (OS_NO_ERR);
    } else {
        if (pevent->OSEventPtr != (void *)0) {        /* Make sure mailbox doesn't already have a msg  */
            OS_EXIT_CRITICAL();
            return (OS_MBOX_FULL);
        } else {
            pevent->OSEventPtr = msg;                 /* Place message in mailbox                      */
            OS_EXIT_CRITICAL();
            return (OS_NO_ERR);
        }
    }
}
#endif
/*$PAGE*/
#if OS_Q_EN && (OS_MAX_QS > 0)
/*
*********************************************************************************************************
*                                       INITIALIZE MESSAGE QUEUE
*********************************************************************************************************
*/

OS_EVENT *OSQCreate(void **start, UBYTE size)
{
    OS_EVENT *pevent;
    OS_Q     *pq;


    OS_ENTER_CRITICAL();
    pevent = OSEventFreeList;                    /* Get next free event control block                  */
    if (OSEventFreeList != (OS_EVENT *)0) {      /* See if pool of free ECB pool was empty             */
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }
    OS_EXIT_CRITICAL();
    if (pevent != (OS_EVENT *)0) {               /* See if we have an event control block              */
        OS_ENTER_CRITICAL();                     /* Get a free queue control block                     */
        pq = OSQFreeList;
        if (OSQFreeList != (OS_Q *)0) {
            OSQFreeList = OSQFreeList->OSQPtr;
        }
        OS_EXIT_CRITICAL();
        if (pq != (OS_Q *)0) {                   /* See if we were able to get a queue control block   */
            pq->OSQStart          = start;       /* Yes, initialize the queue                          */
            pq->OSQEnd            = &start[size];
            pq->OSQIn             = start;
            pq->OSQOut            = start;
            pq->OSQSize           = size;
            pq->OSQEntries        = 0;
            pevent->OSEventPtr    = pq;
            pevent->OSEventGrp    = 0x00;        /* Initialize rest of event control block             */
            pevent->OSEventTbl[0] = 0x00;
            pevent->OSEventTbl[1] = 0x00;
            pevent->OSEventTbl[2] = 0x00;
            pevent->OSEventTbl[3] = 0x00;
            pevent->OSEventTbl[4] = 0x00;
            pevent->OSEventTbl[5] = 0x00;
            pevent->OSEventTbl[6] = 0x00;
            pevent->OSEventTbl[7] = 0x00;
        } else {                                 /* No,  since we couldn't get a queue control block   */
            OS_ENTER_CRITICAL();                 /* Return event control block on error                */
            pevent->OSEventPtr = (void *)OSEventFreeList;
            OSEventFreeList    = pevent;
            OS_EXIT_CRITICAL();
            pevent = (OS_EVENT *)0;
        }
    }
    return (pevent);
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                      ACCEPT MESSAGE FROM QUEUE
*
* Description: This function checks the queue to see if a message is available.  Unlike OSQPend(),
*              OSQAccept() does not suspend the calling task if a message is not available.
* Arguments  : 'pevent'      is a pointer to the event control block
* Returns    : != (void *)0  is the message in the queue if one is available.  The message is removed
*                            from the so the next time OSQAccept() is called, the queue will contain
*                            one less entry.
*              == (void *)0  if the queue is empty
*********************************************************************************************************
*/

void *OSQAccept(OS_EVENT *pevent)
{
    void  *msg;
    OS_Q  *pq;


    OS_ENTER_CRITICAL();
    pq = pevent->OSEventPtr;                     /* Point at queue control block                       */
    if (pq->OSQEntries != 0) {                   /* See if any messages in the queue                   */
        msg = *pq->OSQOut++;                     /* Yes, extract oldest message from the queue         */
        pq->OSQEntries--;                        /* Update the number of entries in the queue          */
        if (pq->OSQOut == pq->OSQEnd) {          /* Wrap OUT pointer if we are at the end of the queue */
            pq->OSQOut = pq->OSQStart;
        }
    } else {
        msg = (void *)0;                         /* Queue is empty                                     */
    }
    OS_EXIT_CRITICAL();
    return (msg);                                /* Return message received (or NULL)                  */
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                     PEND ON A QUEUE FOR A MESSAGE
*********************************************************************************************************
*/

void *OSQPend(OS_EVENT *pevent, UWORD timeout, UBYTE *err)
{
    void  *msg;
    OS_Q  *pq;


    OS_ENTER_CRITICAL();
    pq = pevent->OSEventPtr;                     /* Point at queue control block                       */
    if (pq->OSQEntries != 0) {                   /* See if any messages in the queue                   */
        msg = *pq->OSQOut++;                     /* Yes, extract oldest message from the queue         */
        pq->OSQEntries--;                        /* Update the number of entries in the queue          */
        if (pq->OSQOut == pq->OSQEnd) {          /* Wrap OUT pointer if we are at the end of the queue */
            pq->OSQOut = pq->OSQStart;
        }
        OS_EXIT_CRITICAL();
        *err = OS_NO_ERR;
    } else {
        OSTCBCur->OSTCBStat    |= OS_STAT_Q;     /* Task will have to pend for a message to be posted  */
        OSTCBCur->OSTCBDly      = timeout;       /* Load timeout into TCB                              */
        OSTCBCur->OSTCBEventPtr = pevent;        /* Store pointer to event control block in TCB        */
        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Task no longer ready      */
            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
        }
        pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;      /* Put task in waiting list  */
        pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
        OS_EXIT_CRITICAL();
        OSSched();                               /* Find next highest priority task ready to run       */
        OS_ENTER_CRITICAL();
        if ((msg = OSTCBCur->OSTCBMsg) != (void *)0) {/* Did we get a message?                         */
            OSTCBCur->OSTCBMsg      = (void *)0;      /* Extract message from TCB (Put there by QPost) */
            OSTCBCur->OSTCBStat     = OS_STAT_RDY;
            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;  /* No longer waiting for event                   */
            OS_EXIT_CRITICAL();
            *err                    = OS_NO_ERR;
        } else if (OSTCBCur->OSTCBStat & OS_STAT_Q) { /* Timed out if status indicates pending on Q    */
            if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
                pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
            }
            OSTCBCur->OSTCBStat     = OS_STAT_RDY;    /* Set status to ready                           */
            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;  /* No longer waiting for event                   */
            OS_EXIT_CRITICAL();
            msg                     = (void *)0;      /* No message received                           */
            *err                    = OS_TIMEOUT;     /* Indicate a timeout occured                    */
        } else {
            msg = *pq->OSQOut++;                      /* Extract message from queue                    */
            pq->OSQEntries--;                         /* Update the number of entries in the queue     */
            if (pq->OSQOut == pq->OSQEnd) {           /* Wrap OUT pointer if we are at the end of Q    */
                pq->OSQOut = pq->OSQStart;
            }
            OS_EXIT_CRITICAL();
            *err = OS_NO_ERR;
        }
    }                                                 /* Return message received (or NULL)              */
    return (msg);
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                        POST MESSAGE TO A QUEUE
*********************************************************************************************************
*/

UBYTE OSQPost(OS_EVENT *pevent, void *msg)
{
    OS_Q   *pq;
    OS_TCB *ptcb;
    UBYTE   x;
    UBYTE   y;
    UBYTE   bitx;
    UBYTE   bity;
    UBYTE   p;


    OS_ENTER_CRITICAL();
    if (pevent->OSEventGrp) {                         /* See if any task pending on queue              */
        y    = OSUnMapTbl[pevent->OSEventGrp];        /* Find highest prio. task waiting for message   */
        bity = OSMapTbl[y];
        x    = OSUnMapTbl[pevent->OSEventTbl[y]];
        bitx = OSMapTbl[x];
        p    = (y << 3) + x;                          /* Find priority of task getting the msg         */
        if ((pevent->OSEventTbl[y] &= ~bitx) == 0) {  /* Remove this task from the waiting list        */
            pevent->OSEventGrp &= ~bity;
        }
        ptcb                 =  OSTCBPrioTbl[p];      /* Point to this task's OS_TCB                   */
        ptcb->OSTCBDly       =  0;                    /* Prevent OSTimeTick() from readying task       */
        ptcb->OSTCBEventPtr  = (OS_EVENT *)0;         /* Unlink ECB from this task                     */
        ptcb->OSTCBMsg       = msg;                   /* Send message directly to waiting task         */
        ptcb->OSTCBStat     &= ~OS_STAT_Q;            /* Clear bit associated with event type          */
        if (ptcb->OSTCBStat == OS_STAT_RDY) {         /* See if task is ready (could be susp'd)        */
            OSRdyGrp        |=  bity;                 /* Put task in the ready to run list             */
            OSRdyTbl[y]     |=  bitx;
        }
        OS_EXIT_CRITICAL();
        OSSched();                                    /* Find highest priority task ready to run       */
        return (OS_NO_ERR);
    } else {
        pq = pevent->OSEventPtr;                      /* Point to queue control block                  */
        if (pq->OSQEntries >= pq->OSQSize) {          /* Make sure queue is not full                   */
            OS_EXIT_CRITICAL();
            return (OS_Q_FULL);
        } else {
            *pq->OSQIn++ = msg;                       /* Insert message into queue                     */
            pq->OSQEntries++;                         /* Update the nbr of entries in the queue        */
            if (pq->OSQIn == pq->OSQEnd) {            /* Wrap IN ptr if we are at end of queue         */
                pq->OSQIn = pq->OSQStart;
            }
            OS_EXIT_CRITICAL();
        }
        return (OS_NO_ERR);
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                            DUMMY FUNCTION
*********************************************************************************************************
*/

static void  OSDummy(void)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综| 色婷婷国产精品| bt欧美亚洲午夜电影天堂| 欧美日韩黄色一区二区| 亚洲欧美在线观看| 国产裸体歌舞团一区二区| 欧美日韩一二三| 国产精品久久午夜夜伦鲁鲁| 裸体健美xxxx欧美裸体表演| 在线观看一区二区精品视频| 日本一二三四高清不卡| 麻豆国产精品一区二区三区| 欧美日韩一二三| 一区2区3区在线看| 99国产精品国产精品久久| 国产精品高潮呻吟久久| 免费看日韩a级影片| 色诱视频网站一区| 中文字幕欧美一| 99综合影院在线| 国产欧美日韩中文久久| 国内精品第一页| 欧美sm极限捆绑bd| 美女在线观看视频一区二区| 91精品国产麻豆国产自产在线| 亚洲综合丁香婷婷六月香| av高清久久久| 亚洲视频每日更新| 波多野结衣在线一区| 中文字幕乱码久久午夜不卡| 国产不卡一区视频| 国产精品免费看片| 91在线精品一区二区| 中文字幕一区二区三区在线不卡| 不卡的电视剧免费网站有什么| 国产亚洲精品超碰| 成人丝袜高跟foot| 国产精品久久久久aaaa樱花| 成人网在线播放| 国产精品白丝在线| 91视频国产观看| 亚洲影院理伦片| 欧美色精品天天在线观看视频| 亚洲激情在线播放| 91色视频在线| 午夜久久福利影院| 日韩欧美成人激情| 国产福利一区在线| 一区二区在线观看免费| 99热99精品| 日韩福利电影在线观看| 精品久久免费看| 99久久久久久| 日韩激情视频在线观看| 久久嫩草精品久久久久| 不卡的av电影| 久久国产尿小便嘘嘘| 国产色产综合色产在线视频| 色婷婷综合久久久中文一区二区| 亚洲成va人在线观看| 日韩精品一区二区三区在线播放| 国产成人av一区二区三区在线| 亚洲欧美电影一区二区| 91精品国产日韩91久久久久久| 国产乱理伦片在线观看夜一区| 亚洲日穴在线视频| 欧美mv日韩mv| 欧美中文字幕不卡| 狠狠色丁香久久婷婷综合_中 | 亚洲一区二区三区影院| 欧美美女视频在线观看| 国产成人综合在线观看| 亚洲网友自拍偷拍| 国产人成一区二区三区影院| 欧美专区亚洲专区| 成人网在线播放| 狂野欧美性猛交blacked| 中文字幕日韩一区| www激情久久| 欧美日韩免费高清一区色橹橹| 国产在线看一区| 亚洲超碰97人人做人人爱| 国产欧美日韩亚州综合| 欧美一二三在线| 日本高清不卡视频| 国产ts人妖一区二区| 美女脱光内衣内裤视频久久影院| 综合欧美亚洲日本| 亚洲国产精品t66y| 精品处破学生在线二十三| 欧美性xxxxxx少妇| 99精品视频免费在线观看| 国产一区中文字幕| 日韩av一区二区在线影视| 一区二区欧美国产| 国产精品久久久久久久久免费丝袜| 日韩午夜在线观看| 欧美日韩高清在线播放| 91激情在线视频| 一本色道久久综合精品竹菊| 成人aaaa免费全部观看| 国产一二三精品| 久热成人在线视频| 奇米综合一区二区三区精品视频 | 在线亚洲精品福利网址导航| 国产福利电影一区二区三区| 国产九色sp调教91| 国产一区二区不卡| 国内外成人在线视频| 肉色丝袜一区二区| 婷婷开心激情综合| 亚洲成av人综合在线观看| 伊人色综合久久天天| 亚洲人被黑人高潮完整版| 综合在线观看色| 亚洲日本在线视频观看| 亚洲精品国产视频| 尤物av一区二区| 亚洲自拍偷拍av| 亚洲成av人综合在线观看| 首页综合国产亚洲丝袜| 日本伊人午夜精品| 精品中文字幕一区二区| 激情图区综合网| 成人午夜精品在线| 99re成人在线| 欧美日韩三级一区| 欧美成人精精品一区二区频| 精品成人a区在线观看| 国产三级精品视频| 亚洲欧美成aⅴ人在线观看| 亚洲成在人线免费| 久久精品国产**网站演员| 精久久久久久久久久久| 国产成人综合在线观看| 一本一本大道香蕉久在线精品 | 夜夜嗨av一区二区三区网页| 亚洲国产视频网站| 麻豆久久一区二区| 国产高清精品久久久久| 色婷婷久久久亚洲一区二区三区 | 久久国产日韩欧美精品| 国产乱一区二区| 91视频观看免费| 欧美成人r级一区二区三区| 日本一区二区视频在线| 亚洲国产精品自拍| 国内精品国产成人| 欧美午夜精品免费| 久久久久久亚洲综合影院红桃| **性色生活片久久毛片| 日韩成人伦理电影在线观看| 国产久卡久卡久卡久卡视频精品| 欧洲精品在线观看| 国产色一区二区| 亚洲777理论| 不卡的av中国片| 欧美变态凌虐bdsm| 一区二区三区四区蜜桃| 国产综合久久久久久鬼色| 91麻豆福利精品推荐| 亚洲精品在线免费播放| 亚洲高清一区二区三区| 高清在线成人网| 日韩欧美精品三级| 亚洲免费观看高清完整| 国模无码大尺度一区二区三区| 色天使色偷偷av一区二区| 国产亚洲欧美中文| 奇米综合一区二区三区精品视频| 色综合久久88色综合天天| 国产拍欧美日韩视频二区| 麻豆91精品91久久久的内涵| 欧美日韩一级大片网址| 1000精品久久久久久久久| 国内成人自拍视频| 欧美一区二区久久久| 亚洲精品欧美二区三区中文字幕| 国产精品亚洲成人| 欧美本精品男人aⅴ天堂| 亚洲va欧美va人人爽| 97久久超碰国产精品电影| 久久久久国产精品麻豆ai换脸| 轻轻草成人在线| 欧美日韩精品电影| 性欧美大战久久久久久久久| 99re亚洲国产精品| 一色桃子久久精品亚洲| 国产成人免费高清| 久久久99精品久久| 国内久久精品视频| 亚洲精品一区二区三区香蕉| 免费成人美女在线观看.| 91精品国产91久久久久久一区二区 | 欧美乱妇15p| 亚洲国产毛片aaaaa无费看| 欧美曰成人黄网| 亚洲午夜免费电影| 欧美日韩中文一区| 亚洲图片欧美综合|