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

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

?? os_core.c

?? Micrium-uCOS-II 2.86版
?? C
?? 第 1 頁 / 共 5 頁
字號:
                    } else {
                        ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
                    }

                    if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* Is task suspended?       */
                        OSRdyGrp               |= ptcb->OSTCBBitY;             /* No,  Make ready          */
                        OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
                    }
                }
            }
            ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list                */
            OS_EXIT_CRITICAL();
        }
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                             GET VERSION
*
* Description: This function is used to return the version number of uC/OS-II.  The returned value
*              corresponds to uC/OS-II's version number multiplied by 100.  In other words, version 2.00
*              would be returned as 200.
*
* Arguments  : none
*
* Returns    : the version number of uC/OS-II multiplied by 100.
*********************************************************************************************************
*/

INT16U  OSVersion (void)
{
    return (OS_VERSION);
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                            DUMMY FUNCTION
*
* Description: This function doesn't do anything.  It is called by OSTaskDel().
*
* Arguments  : none
*
* Returns    : none
*********************************************************************************************************
*/

#if OS_TASK_DEL_EN > 0
void  OS_Dummy (void)
{
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                             MAKE TASK READY TO RUN BASED ON EVENT OCCURING
*
* Description: This function is called by other uC/OS-II services and is used to ready a task that was
*              waiting for an event to occur.
*
* Arguments  : pevent      is a pointer to the event control block corresponding to the event.
*
*              pmsg        is a pointer to a message.  This pointer is used by message oriented services
*                          such as MAILBOXEs and QUEUEs.  The pointer is not used when called by other
*                          service functions.
*
*              msk         is a mask that is used to clear the status byte of the TCB.  For example,
*                          OSSemPost() will pass OS_STAT_SEM, OSMboxPost() will pass OS_STAT_MBOX etc.
*
*              pend_stat   is used to indicate the readied task's pending status:
*
*                          OS_STAT_PEND_OK      Task ready due to a post (or delete), not a timeout or
*                                               an abort.
*                          OS_STAT_PEND_ABORT   Task ready due to an abort.
*
* Returns    : none
*
* Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *pmsg, INT8U msk, INT8U pend_stat)
{
    OS_TCB  *ptcb;
    INT8U    y;
    INT8U    x;
    INT8U    prio;
#if OS_LOWEST_PRIO > 63
    INT16U  *ptbl;
#endif


#if OS_LOWEST_PRIO <= 63
    y    = OSUnMapTbl[pevent->OSEventGrp];              /* Find HPT waiting for message                */
    x    = OSUnMapTbl[pevent->OSEventTbl[y]];
    prio = (INT8U)((y << 3) + x);                       /* Find priority of task getting the msg       */
#else
    if ((pevent->OSEventGrp & 0xFF) != 0) {             /* Find HPT waiting for message                */
        y = OSUnMapTbl[ pevent->OSEventGrp & 0xFF];
    } else {
        y = OSUnMapTbl[(pevent->OSEventGrp >> 8) & 0xFF] + 8;
    }
    ptbl = &pevent->OSEventTbl[y];
    if ((*ptbl & 0xFF) != 0) {
        x = OSUnMapTbl[*ptbl & 0xFF];
    } else {
        x = OSUnMapTbl[(*ptbl >> 8) & 0xFF] + 8;
    }
    prio = (INT8U)((y << 4) + x);                       /* Find priority of task getting the msg       */
#endif

    ptcb                  =  OSTCBPrioTbl[prio];        /* Point to this task's OS_TCB                 */
    ptcb->OSTCBDly        =  0;                         /* Prevent OSTimeTick() from readying task     */
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
    ptcb->OSTCBMsg        =  pmsg;                      /* Send message directly to waiting task       */
#else
    pmsg                  =  pmsg;                      /* Prevent compiler warning if not used        */
#endif
    ptcb->OSTCBStat      &= ~msk;                       /* Clear bit associated with event type        */
    ptcb->OSTCBStatPend   =  pend_stat;                 /* Set pend status of post or abort            */
                                                        /* See if task is ready (could be susp'd)      */
    if ((ptcb->OSTCBStat &   OS_STAT_SUSPEND) == OS_STAT_RDY) {
        OSRdyGrp         |=  ptcb->OSTCBBitY;           /* Put task in the ready to run list           */
        OSRdyTbl[y]      |=  ptcb->OSTCBBitX;
    }

    OS_EventTaskRemove(ptcb, pevent);                   /* Remove this task from event   wait list     */
#if (OS_EVENT_MULTI_EN > 0)
    if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) {   /* Remove this task from events' wait lists    */
        OS_EventTaskRemoveMulti(ptcb, ptcb->OSTCBEventMultiPtr);
        ptcb->OSTCBEventPtr       = (OS_EVENT  *)pevent;/* Return event as first multi-pend event ready*/
    }
#endif

    return (prio);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                   MAKE TASK WAIT FOR EVENT TO OCCUR
*
* Description: This function is called by other uC/OS-II services to suspend a task because an event has
*              not occurred.
*
* Arguments  : pevent   is a pointer to the event control block for which the task will be waiting for.
*
* Returns    : none
*
* Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
void  OS_EventTaskWait (OS_EVENT *pevent)
{
    INT8U  y;


    OSTCBCur->OSTCBEventPtr               = pevent;                 /* Store ptr to ECB in TCB         */

    pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;    /* Put task in waiting list        */
    pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;

    y             =  OSTCBCur->OSTCBY;            /* Task no longer ready                              */
    OSRdyTbl[y]  &= ~OSTCBCur->OSTCBBitX;
    if (OSRdyTbl[y] == 0) {
        OSRdyGrp &= ~OSTCBCur->OSTCBBitY;         /* Clear event grp bit if this was only task pending */
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                          MAKE TASK WAIT FOR ANY OF MULTIPLE EVENTS TO OCCUR
*
* Description: This function is called by other uC/OS-II services to suspend a task because any one of
*              multiple events has not occurred.
*
* Arguments  : pevents_wait     is a pointer to an array of event control blocks, NULL-terminated, for 
*                               which the task will be waiting for.
*
* Returns    : none.
*
* Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0))
void  OS_EventTaskWaitMulti (OS_EVENT **pevents_wait)
{
    OS_EVENT **pevents;
    OS_EVENT  *pevent;
    INT8U      y;


    OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;
    OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)pevents_wait;       /* Store ptr to ECBs in TCB        */

    pevents =  pevents_wait;
    pevent  = *pevents;
    while (pevent != (OS_EVENT *)0) {                               /* Put task in waiting lists       */
        pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
        pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
        pevents++;
        pevent = *pevents;
    }

    y             =  OSTCBCur->OSTCBY;            /* Task no longer ready                              */
    OSRdyTbl[y]  &= ~OSTCBCur->OSTCBBitX;
    if (OSRdyTbl[y] == 0) {
        OSRdyGrp &= ~OSTCBCur->OSTCBBitY;         /* Clear event grp bit if this was only task pending */
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                   REMOVE TASK FROM EVENT WAIT LIST
*
* Description: Remove a task from an event's wait list.
*
* Arguments  : ptcb     is a pointer to the task to remove.
*
*              pevent   is a pointer to the event control block.
*
* Returns    : none
*
* Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if (OS_EVENT_EN)
void  OS_EventTaskRemove (OS_TCB   *ptcb,
                          OS_EVENT *pevent)
{
    INT8U  y;


    y                       =  ptcb->OSTCBY;
    pevent->OSEventTbl[y]  &= ~ptcb->OSTCBBitX;         /* Remove task from wait list                  */
    if (pevent->OSEventTbl[y] == 0) {
        pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                             REMOVE TASK FROM MULTIPLE EVENTS WAIT LISTS
*
* Description: Remove a task from multiple events' wait lists.
*
* Arguments  : ptcb             is a pointer to the task to remove.
*
*              pevents_multi    is a pointer to the array of event control blocks, NULL-terminated.
*
* Returns    : none
*
* Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
*********************************************************************************************************
*/
#if ((OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0))
void  OS_EventTaskRemoveMulti (OS_TCB    *ptcb,
                               OS_EVENT **pevents_multi)
{
    OS_EVENT **pevents;
    OS_EVENT  *pevent;
    INT8U      y;
#if (OS_LOWEST_PRIO <= 63)
    INT8U      bity;
    INT8U      bitx;
#else
    INT16U     bity;
    INT16U     bitx;
#endif


    y       =  ptcb->OSTCBY;
    bity    =  ptcb->OSTCBBitY;
    bitx    =  ptcb->OSTCBBitX;
    pevents =  pevents_multi;
    pevent  = *pevents;
    while (pevent != (OS_EVENT *)0) {                   /* Remove task from all events' wait lists     */
        pevent->OSEventTbl[y]  &= ~bitx;
        if (pevent->OSEventTbl[y] == 0) {
            pevent->OSEventGrp &= ~bity;
        }
        pevents++;
        pevent = *pevents;
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
*
* Description: This function is called by other uC/OS-II services to initialize the event wait list.
*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品bt天堂精选| 亚洲日本在线天堂| 日本精品裸体写真集在线观看| 视频一区中文字幕国产| 日本一区二区三区免费乱视频| 51午夜精品国产| 91亚洲国产成人精品一区二区三| 久久99热99| 日韩精品亚洲一区| 亚洲老司机在线| 中文字幕中文字幕一区| 精品国产3级a| 欧美一区二区三级| 欧美日韩一区二区在线视频| 国产黄人亚洲片| 蜜臀精品一区二区三区在线观看| 亚洲制服丝袜在线| 亚洲人一二三区| 国产亚洲短视频| 久久伊人蜜桃av一区二区| 欧美精品久久99久久在免费线| 91天堂素人约啪| 成人不卡免费av| 粉嫩一区二区三区性色av| 国产美女精品在线| 精品一区二区三区在线观看国产| 亚洲国产综合色| 樱桃国产成人精品视频| 中文字幕一区二区三区视频| 国产精品免费免费| 国产三级欧美三级日产三级99| 精品久久国产老人久久综合| 这里是久久伊人| 欧美精品乱码久久久久久按摩| 欧美美女bb生活片| 欧美日韩成人一区| 7777精品伊人久久久大香线蕉超级流畅| 欧美在线不卡视频| 欧美丝袜丝nylons| 欧美精品丝袜中出| 日韩欧美久久一区| 精品国产一区二区三区久久影院 | 国产欧美一区二区精品婷婷| 欧美电影免费观看高清完整版在| 欧美性感一类影片在线播放| 欧美人狂配大交3d怪物一区| 欧美精品第1页| 欧美一区二区播放| 精品国产乱码久久久久久老虎| 精品国产91洋老外米糕| 国产偷国产偷亚洲高清人白洁| 国产三级一区二区三区| 成人欧美一区二区三区| 亚洲午夜视频在线观看| 日韩黄色免费电影| 国产一区在线精品| 不卡的av电影| 91成人免费电影| 欧美精品久久久久久久多人混战| 日韩一级完整毛片| 久久久久久电影| 18欧美乱大交hd1984| 亚洲自拍另类综合| 精品一区二区三区日韩| 成人三级伦理片| 欧美性色aⅴ视频一区日韩精品| 欧美日韩视频在线第一区 | 精品一区二区三区免费视频| 国产成人日日夜夜| 欧美综合亚洲图片综合区| 制服丝袜成人动漫| 国产欧美日韩精品a在线观看| 亚洲欧美日韩中文字幕一区二区三区| 午夜欧美2019年伦理| 国精产品一区一区三区mba视频| 成人ar影院免费观看视频| 欧美熟乱第一页| 国产亚洲精品超碰| 亚洲成人777| 成人性生交大合| 51精品国自产在线| 国产精品天美传媒| 日本最新不卡在线| 丁香另类激情小说| 欧美日韩精品福利| 欧美国产日产图区| 肉色丝袜一区二区| 波多野结衣的一区二区三区| 在线播放日韩导航| 国产精品久久久久9999吃药| 日本成人中文字幕| 色呦呦日韩精品| 久久久久国产精品厨房| 亚洲成年人影院| 成人精品国产免费网站| 日韩一区二区影院| 亚洲精品久久久蜜桃| 国产精品18久久久久| 欧美日韩二区三区| 亚洲你懂的在线视频| 国产在线播精品第三| 欧美精品高清视频| 一区二区三区高清不卡| 国产宾馆实践打屁股91| 日韩一级完整毛片| 婷婷综合另类小说色区| 99久久精品一区| 国产亚洲美州欧州综合国| 日韩一区精品视频| 欧美少妇bbb| 亚洲免费在线看| 不卡在线视频中文字幕| 国产偷v国产偷v亚洲高清| 久久国产日韩欧美精品| 在线播放中文字幕一区| 亚洲香蕉伊在人在线观| av电影一区二区| 中文字幕精品综合| 国产精品一区二区久久不卡| 日韩女优电影在线观看| 亚洲chinese男男1069| 欧美中文一区二区三区| 亚洲精品ww久久久久久p站| 不卡在线视频中文字幕| 国产日韩欧美一区二区三区乱码| 久久精品久久精品| 欧美一级二级三级蜜桃| 免费看欧美美女黄的网站| 欧美日韩激情在线| 亚洲一区在线观看视频| 色综合久久久久综合体| 亚洲乱码日产精品bd| 99久久99久久精品免费看蜜桃| 中文字幕精品三区| 不卡视频一二三四| 中文字幕一区在线| 99re热视频这里只精品| 国产日产欧美精品一区二区三区| 国产一区二区看久久| 国产三级三级三级精品8ⅰ区| 国产精品系列在线播放| 国产欧美日韩视频在线观看| 不卡电影一区二区三区| 亚洲乱码国产乱码精品精98午夜| 色综合久久天天综合网| 亚洲成a人片在线观看中文| 欧美日韩高清不卡| 免费在线欧美视频| 精品国精品自拍自在线| 高清视频一区二区| 综合激情成人伊人| 在线观看欧美精品| 日韩成人伦理电影在线观看| 欧美一级理论片| 国产一区二区三区久久久| 国产欧美在线观看一区| 一本一道综合狠狠老| 亚洲午夜日本在线观看| 91精品久久久久久久99蜜桃| 久久99精品一区二区三区三区| 久久久久国色av免费看影院| 91免费在线看| 三级成人在线视频| 国产午夜精品一区二区三区嫩草| 成人精品视频一区二区三区尤物| 亚洲美女屁股眼交| 日韩一卡二卡三卡国产欧美| 高清av一区二区| 亚洲精品视频免费观看| 日韩欧美亚洲另类制服综合在线| 高清在线成人网| 三级亚洲高清视频| 国产精品美女久久久久高潮| 欧美日韩国产高清一区二区三区| 国产麻豆成人传媒免费观看| 一区二区在线观看免费| 欧美成人国产一区二区| 99久精品国产| 奇米一区二区三区av| 中文字幕一区二区三区在线观看| 欧美一区二区三区在线看| 成人av网站免费观看| 日韩高清电影一区| 国产精品久久久久久福利一牛影视 | 视频在线观看91| 欧美国产精品久久| 69堂精品视频| www.亚洲色图| 麻豆精品一区二区三区| 亚洲欧洲99久久| 精品久久久久久久久久久久包黑料 | 欧美色精品在线视频| 国产一区二区三区蝌蚪| 五月天一区二区| 中文字幕在线一区| 日韩欧美成人激情| 91福利精品视频| 成人黄色在线视频| 韩国一区二区三区| 无吗不卡中文字幕|