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

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

?? os_mbox.c

?? Micrium-uCOS-II 2.86版
?? C
?? 第 1 頁 / 共 3 頁
字號:
             while (pevent->OSEventGrp != 0) {             /* Ready ALL tasks waiting for mailbox      */
                 (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_OK);
             }
#if OS_EVENT_NAME_SIZE > 1
             pevent->OSEventName[0] = '?';                 /* Unknown name                             */
             pevent->OSEventName[1] = OS_ASCII_NUL;
#endif
             pevent->OSEventType    = OS_EVENT_TYPE_UNUSED;
             pevent->OSEventPtr     = OSEventFreeList;     /* Return Event Control Block to free list  */
             pevent->OSEventCnt     = 0;
             OSEventFreeList        = pevent;              /* Get next free event control block        */
             OS_EXIT_CRITICAL();
             if (tasks_waiting == OS_TRUE) {               /* Reschedule only if task(s) were waiting  */
                 OS_Sched();                               /* Find highest priority task ready to run  */
             }
             *perr         = OS_ERR_NONE;
             pevent_return = (OS_EVENT *)0;                /* Mailbox has been deleted                 */
             break;

        default:
             OS_EXIT_CRITICAL();
             *perr         = OS_ERR_INVALID_OPT;
             pevent_return = pevent;
             break;
    }
    return (pevent_return);
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                                      PEND ON MAILBOX FOR A MESSAGE
*
* Description: This function waits for a message to be sent to a mailbox
*
* Arguments  : pevent        is a pointer to the event control block associated with the desired mailbox
*
*              timeout       is an optional timeout period (in clock ticks).  If non-zero, your task will
*                            wait for a message to arrive at the mailbox up to the amount of time
*                            specified by this argument.  If you specify 0, however, your task will wait
*                            forever at the specified mailbox or, until a message arrives.
*
*              perr          is a pointer to where an error message will be deposited.  Possible error
*                            messages are:
*
*                            OS_ERR_NONE         The call was successful and your task received a
*                                                message.
*                            OS_ERR_TIMEOUT      A message was not received within the specified 'timeout'.
*                            OS_ERR_PEND_ABORT   The wait on the mailbox was aborted.
*                            OS_ERR_EVENT_TYPE   Invalid event type
*                            OS_ERR_PEND_ISR     If you called this function from an ISR and the result
*                                                would lead to a suspension.
*                            OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer
*                            OS_ERR_PEND_LOCKED  If you called this function when the scheduler is locked
*
* Returns    : != (void *)0  is a pointer to the message received
*              == (void *)0  if no message was received or,
*                            if 'pevent' is a NULL pointer or,
*                            if you didn't pass the proper pointer to the event control block.
*********************************************************************************************************
*/
/*$PAGE*/
void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
{
    void      *pmsg;
#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    OS_CPU_SR  cpu_sr = 0;
#endif



#if OS_ARG_CHK_EN > 0
    if (perr == (INT8U *)0) {                         /* Validate 'perr'                               */
        return ((void *)0);
    }
    if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
        *perr = OS_ERR_PEVENT_NULL;
        return ((void *)0);
    }
#endif
    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
        *perr = OS_ERR_EVENT_TYPE;
        return ((void *)0);
    }
    if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
        *perr = OS_ERR_PEND_ISR;                      /* ... can't PEND from an ISR                    */
        return ((void *)0);
    }
    if (OSLockNesting > 0) {                          /* See if called with scheduler locked ...       */
        *perr = OS_ERR_PEND_LOCKED;                   /* ... can't PEND when locked                    */
        return ((void *)0);
    }
    OS_ENTER_CRITICAL();
    pmsg = pevent->OSEventPtr;
    if (pmsg != (void *)0) {                          /* See if there is already a message             */
        pevent->OSEventPtr = (void *)0;               /* Clear the mailbox                             */
        OS_EXIT_CRITICAL();
        *perr = OS_ERR_NONE;
        return (pmsg);                                /* Return the message received (or NULL)         */
    }
    OSTCBCur->OSTCBStat     |= OS_STAT_MBOX;          /* Message not available, task will pend         */
    OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
    OSTCBCur->OSTCBDly       = timeout;               /* Load timeout in TCB                           */
    OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
    OS_EXIT_CRITICAL();
    OS_Sched();                                       /* Find next highest priority task ready to run  */
    OS_ENTER_CRITICAL();
    switch (OSTCBCur->OSTCBStatPend) {                /* See if we timed-out or aborted                */
        case OS_STAT_PEND_OK:
             pmsg =  OSTCBCur->OSTCBMsg;
            *perr =  OS_ERR_NONE;
             break;

        case OS_STAT_PEND_ABORT:
             pmsg = (void *)0;
            *perr =  OS_ERR_PEND_ABORT;               /* Indicate that we aborted                      */
             break;

        case OS_STAT_PEND_TO:
        default:
             OS_EventTaskRemove(OSTCBCur, pevent);
             pmsg = (void *)0;
            *perr =  OS_ERR_TIMEOUT;                  /* Indicate that we didn't get event within TO   */
             break;
    }
    OSTCBCur->OSTCBStat          =  OS_STAT_RDY;      /* Set   task  status to ready                   */
    OSTCBCur->OSTCBStatPend      =  OS_STAT_PEND_OK;  /* Clear pend  status                            */
    OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;    /* Clear event pointers                          */
#if (OS_EVENT_MULTI_EN > 0)
    OSTCBCur->OSTCBEventMultiPtr = (OS_EVENT **)0;
#endif
    OSTCBCur->OSTCBMsg           = (void      *)0;    /* Clear  received message                       */
    OS_EXIT_CRITICAL();
    return (pmsg);                                    /* Return received message                       */
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                      ABORT WAITING ON A MESSAGE MAILBOX
*
* Description: This function aborts & readies any tasks currently waiting on a mailbox.  This function 
*              should be used to fault-abort the wait on the mailbox, rather than to normally signal
*              the mailbox via OSMboxPost() or OSMboxPostOpt().
*
* Arguments  : pevent        is a pointer to the event control block associated with the desired mailbox.
*
*              opt           determines the type of ABORT performed:
*                            OS_PEND_OPT_NONE         ABORT wait for a single task (HPT) waiting on the
*                                                     mailbox
*                            OS_PEND_OPT_BROADCAST    ABORT wait for ALL tasks that are  waiting on the
*                                                     mailbox
*
*              perr          is a pointer to where an error message will be deposited.  Possible error
*                            messages are:
*
*                            OS_ERR_NONE         No tasks were     waiting on the mailbox.
*                            OS_ERR_PEND_ABORT   At least one task waiting on the mailbox was readied
*                                                and informed of the aborted wait; check return value 
*                                                for the number of tasks whose wait on the mailbox 
*                                                was aborted.
*                            OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a mailbox.
*                            OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
*
* Returns    : == 0          if no tasks were waiting on the mailbox, or upon error.
*              >  0          if one or more tasks waiting on the mailbox are now readied and informed.
*********************************************************************************************************
*/

#if OS_MBOX_PEND_ABORT_EN > 0
INT8U  OSMboxPendAbort (OS_EVENT *pevent, INT8U opt, INT8U *perr)
{
    INT8U      nbr_tasks;
#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr = 0;
#endif



#if OS_ARG_CHK_EN > 0
    if (perr == (INT8U *)0) {                              /* Validate 'perr'                          */
        return (0);
    }
    if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
        *perr = OS_ERR_PEVENT_NULL;
        return (0);
    }
#endif
    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {       /* Validate event block type                */
        *perr = OS_ERR_EVENT_TYPE;
        return (0);
    }
    OS_ENTER_CRITICAL();
    if (pevent->OSEventGrp != 0) {                         /* See if any task waiting on mailbox?      */
        nbr_tasks = 0;
        switch (opt) {
            case OS_PEND_OPT_BROADCAST:                    /* Do we need to abort ALL waiting tasks?   */
                 while (pevent->OSEventGrp != 0) {         /* Yes, ready ALL tasks waiting on mailbox  */
                     (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_ABORT);
                     nbr_tasks++;
                 }
                 break;
             
            case OS_PEND_OPT_NONE:
            default:                                       /* No,  ready HPT       waiting on mailbox  */
                 (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_ABORT);
                 nbr_tasks++;
                 break;
        }
        OS_EXIT_CRITICAL();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品日产欧美久久久久| 色婷婷激情久久| 亚洲国产精品久久一线不卡| 国产视频一区二区在线观看| 精品国产电影一区二区 | 欧美电视剧在线观看完整版| 欧美三级一区二区| 欧美撒尿777hd撒尿| 日本精品视频一区二区三区| 91玉足脚交白嫩脚丫在线播放| bt欧美亚洲午夜电影天堂| 国产成人精品一区二区三区网站观看| 精品一区二区日韩| 久久99国产精品久久99果冻传媒| 日韩不卡手机在线v区| 蜜桃一区二区三区四区| 蜜臀av一区二区在线免费观看| 麻豆成人久久精品二区三区红| 麻豆高清免费国产一区| 国产精品综合久久| 波多野结衣一区二区三区| 9i在线看片成人免费| 欧美亚洲国产一区二区三区| 欧美日韩电影在线播放| 欧美日韩中字一区| 日韩欧美国产综合在线一区二区三区| 日韩欧美一卡二卡| 欧美国产激情一区二区三区蜜月| 国产人妖乱国产精品人妖| 国产精品国产三级国产普通话蜜臀 | 成人激情午夜影院| 色香蕉久久蜜桃| 91麻豆精品国产91久久久久 | 国产色爱av资源综合区| 国产精品激情偷乱一区二区∴| 一区二区三区精品在线| 美女脱光内衣内裤视频久久影院| 国产综合成人久久大片91| 成人动漫一区二区在线| 欧美探花视频资源| 久久久精品国产99久久精品芒果 | 免费观看在线综合| 99vv1com这只有精品| 91精品久久久久久蜜臀| 久久你懂得1024| 亚洲第一会所有码转帖| 国产麻豆精品在线| 欧美色爱综合网| 中文字幕欧美激情| 久久99国产精品免费| 日本福利一区二区| 久久综合丝袜日本网| 亚洲综合成人在线视频| 国产精品一区二区在线观看不卡 | 久久精品一区二区三区四区| 亚洲午夜视频在线观看| 成人午夜视频福利| 欧美不卡一区二区| 夜夜爽夜夜爽精品视频| 97久久精品人人做人人爽50路 | av毛片久久久久**hd| 亚洲精品一区在线观看| 午夜精彩视频在线观看不卡| 99精品久久99久久久久| 中文字幕乱码久久午夜不卡| 裸体一区二区三区| 欧美顶级少妇做爰| 亚洲成人黄色小说| 欧美综合一区二区三区| 亚洲毛片av在线| 成人在线综合网| 国产亚洲精品7777| 狠狠色综合日日| 欧美不卡一区二区| 首页综合国产亚洲丝袜| 欧美午夜精品一区| 亚洲高清一区二区三区| 91福利国产成人精品照片| 亚洲视频综合在线| 97精品国产露脸对白| 中文字幕高清一区| 99re视频这里只有精品| 亚洲色图19p| 99精品欧美一区| 亚洲精品美国一| 欧美在线观看一区| 视频一区视频二区中文| 欧美丰满美乳xxx高潮www| 日本亚洲免费观看| 欧美成人艳星乳罩| 国产一区二区精品在线观看| 久久精品一区八戒影视| 国产成人在线视频免费播放| 欧美激情一区二区三区四区| 成人影视亚洲图片在线| 国产精品成人网| 在线日韩一区二区| 污片在线观看一区二区 | 日本不卡视频在线观看| 欧美成人vps| 国产91精品在线观看| 亚洲免费观看高清完整版在线 | 欧美日韩成人激情| 久草精品在线观看| 中文字幕精品—区二区四季| 91啦中文在线观看| 免费成人你懂的| 国产欧美一区二区三区在线看蜜臀| 粉嫩久久99精品久久久久久夜| 国产精品看片你懂得| 在线看国产日韩| 视频一区二区中文字幕| 欧美成人video| 一本一本大道香蕉久在线精品| 亚洲精品中文在线观看| 欧美精品777| 粉嫩av亚洲一区二区图片| 亚洲视频中文字幕| 91超碰这里只有精品国产| 紧缚奴在线一区二区三区| 中文字幕亚洲成人| 91精品国产欧美日韩| 国产成人亚洲综合a∨婷婷 | 欧美二区在线观看| 成人va在线观看| 偷拍一区二区三区四区| 欧美国产日韩亚洲一区| 在线成人高清不卡| 色综合色综合色综合色综合色综合 | 一本到高清视频免费精品| 日本成人中文字幕在线视频| 中文字幕色av一区二区三区| 日韩一级完整毛片| 日本精品视频一区二区| 国产成人三级在线观看| 日本亚洲三级在线| 亚洲精品少妇30p| 欧美丰满美乳xxx高潮www| 国产激情视频一区二区三区欧美 | 国产亚洲1区2区3区| 成人app网站| 国内外精品视频| 亚洲视频在线一区| 国产成人av一区二区三区在线观看| 亚洲国产成人高清精品| 久久久久久免费| 精品理论电影在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品久久久久久最新网址| thepron国产精品| 亚洲自拍偷拍图区| 亚洲精选免费视频| 久久色在线视频| 日韩久久久精品| 色婷婷综合久久久中文字幕| 捆绑调教一区二区三区| 极品少妇xxxx偷拍精品少妇| 亚洲精品大片www| 日本精品一区二区三区高清 | 久久久久久久久久久久久女国产乱| 26uuu国产日韩综合| 国产精品污污网站在线观看| 成人免费高清在线| 一区二区三区精品视频| 久久久久久夜精品精品免费| 久久国产尿小便嘘嘘尿| 亚洲精品v日韩精品| 久久综合久久综合久久| 色视频一区二区| 免费欧美日韩国产三级电影| 亚洲视频小说图片| 久久久久久久综合色一本| 国产精品2024| 一区二区三区欧美视频| 欧美一区二区三区小说| 喷水一区二区三区| 久久综合久久综合久久综合| 成人动漫视频在线| 婷婷丁香激情综合| 精品理论电影在线| 成人黄色小视频| 一区二区激情视频| 在线观看亚洲精品| 亚洲成在人线在线播放| 日韩美女在线视频 | 91黄视频在线观看| 国产一区二区视频在线| 日韩电影免费在线看| 午夜精品久久久久久久99樱桃| 中文字幕在线不卡一区二区三区| 26uuu亚洲婷婷狠狠天堂| 日韩欧美一区中文| 欧美一区2区视频在线观看| 在线欧美日韩国产| 国产一区激情在线| 日韩成人av影视| 一区二区欧美在线观看| 久久久影视传媒| 欧美一卡二卡在线观看| 欧美色图片你懂的|