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

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

?? os_mbox.c

?? S3C2410A的UCOS內核,可以供ARM初學初學者使用
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                uC/OS-II 實時內核
*                                                 消息郵箱管理
*
*                            (c) 版權 1992-2002, 所有版權歸Jean J. Labrosse, Weston, FL 所有
*                                         
*
* 文件名稱 :          OS_MBOX.C
* 程序作者 :          Jean J. Labrosse 
*********************************************************************************************************
*/

#ifndef  OS_MASTER_FILE
#include "includes.h"
#endif

#if OS_MBOX_EN > 0
/*
*********************************************************************************************************
*                                     從郵箱中獲取消息
*
* 函數描述: 該函數檢查郵箱看消息是否有效。不象 OSMboxPend(),如果消息無效,函數OSMboxAccept()不會掛起
*           調用的函數
*
* 輸入參數  : pevent        指向ECB的指針
*
* 返回值    : != (void *)0   如果有效是郵箱中的消息。  OSMboxAccept()再次被調用則郵箱清零,郵箱為空。
*             == (void *)0  郵箱為空,
*                            'pevent' 是空指針,
*                             沒有傳遞適當的事件類型指針
*********************************************************************************************************
*/

#if OS_MBOX_ACCEPT_EN > 0
 void  *OSMboxAccept (OS_EVENT *pevent)
 {
#if OS_CRITICAL_METHOD == 3                      /* 為CPU狀態寄存器分配存儲變量           */
    OS_CPU_SR  cpu_sr;
#endif    
    void      *msg;


#if OS_ARG_CHK_EN > 0
    if (pevent == (OS_EVENT *)0) 
    {                                                   /* 無效的 'pevent'                         */
        return ((void *)0);
    }
    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) 
    {                                                           /* 無效的事件塊類型                */
        return ((void *)0);
    }
#endif
    OS_ENTER_CRITICAL();
    msg                = pevent->OSEventPtr;
    pevent->OSEventPtr = (void *)0;                       /* 清除消息郵箱                         */
    OS_EXIT_CRITICAL();
    return (msg);                                         /* 返回接收的消息 (或空指針)     */
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                        創建一個消息郵箱
*
* 函數描述: 如果空余ECB有效,該函數創建一個消息郵箱。
*
* 輸入參數  : msg           指向存放在郵箱中消息的指針。  如果設定該值為空指針,那么郵箱將為空。
*
* 返回值    : != (OS_EVENT *)0  指向帶有創建消息郵箱的ECB。
*             == (OS_EVENT *)0  無有效的ECB。
*********************************************************************************************************
*/

OS_EVENT  *OSMboxCreate (void *msg)
{
#if OS_CRITICAL_METHOD == 3                      /* 為CPU狀態寄存器分配存儲變量           */
    OS_CPU_SR  cpu_sr;
#endif    
    OS_EVENT  *pevent;


    if (OSIntNesting > 0) 
    {                                              /* 如果調用來自 ISR ...                         */
        return ((OS_EVENT *)0);                  /* ... 從ISR中不能創建                       */
    }
    OS_ENTER_CRITICAL();
    pevent = OSEventFreeList;                                        /* 得到空余的ECB。                */
    if (OSEventFreeList != (OS_EVENT *)0) 
    {                                                                 /* 看是否空余ECB池為空            */
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }
    OS_EXIT_CRITICAL();
    if (pevent != (OS_EVENT *)0)
     {
        pevent->OSEventType = OS_EVENT_TYPE_MBOX;
        pevent->OSEventCnt  = 0;
        pevent->OSEventPtr  = msg;               /* 在ECB 中存儲消息指針             */
        OS_EventWaitListInit(pevent);
    }
    return (pevent);                             /* 返回ECB 的指針              */
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                         刪除一個郵箱
*
* 函數描述: 該函數刪除一個郵箱和就緒等待消息郵箱的所有任務。
*
* 輸入參數  : pevent        指向帶有期望郵箱的ECB的指針。
*
*              opt           決定刪除的選項:
*                            opt == OS_DEL_NO_PEND   只在無任務等待時,才刪除郵箱
*                            opt == OS_DEL_ALWAYS    即使有任務等待,也要刪除郵箱。
*                                                    該種情況下,所有等待任務將就緒。
*
*              err           指向下列值之一的出錯代碼的指針:
*                            OS_NO_ERR               調用成功,郵箱被刪除
*                            OS_ERR_DEL_ISR          從 ISR中刪除郵箱
*                            OS_ERR_INVALID_OPT      指定選項無效
*                            OS_ERR_TASK_WAITING     一個或更多的任務正等待郵箱
*                            OS_ERR_EVENT_TYPE       沒有傳遞一個指向郵箱類型的指針
*                            OS_ERR_PEVENT_NULL      'pevent' 是一個空指針
*
* 返回值     : pevent        upon error
*              (OS_EVENT *)0 郵箱成功刪除
*
* Note(s)    : 1) 該函數使用時要小心。期望消息郵箱的任務一定要檢查OSMboxPend()的返回值。
*              2) OSMboxAccept()的調用函數將不會知道消息郵箱已被刪除。
*              3) 這種調用潛在的關閉中斷很長時間。中斷關閉時間直接正比于等待消息郵箱的任務的數量。
*              4) 由于所有等待郵箱的任務將被就緒。所以,必須小心處理郵箱用在互斥上,因為資源不再受郵箱保護。
*************************************************************************************************************
*/

#if OS_MBOX_DEL_EN > 0
OS_EVENT  *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3                                /* 為CPU狀態寄存器分配存儲變量 */
    OS_CPU_SR  cpu_sr;
#endif    
    BOOLEAN    tasks_waiting;


    if (OSIntNesting > 0) 
    {                                                       /* 如果調用來自 ISR ...               */
        *err = OS_ERR_DEL_ISR;                             /* ... 從ISR中不能刪除             */
        return (pevent);
    }
#if OS_ARG_CHK_EN > 0
    if (pevent == (OS_EVENT *)0) 
    {                                                      /* 無效的 'pevent'                        */
        *err = OS_ERR_PEVENT_NULL;
        return (pevent);
    }
    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) 
    {                                                     /* 無效的事件塊類型                */
        *err = OS_ERR_EVENT_TYPE;
        return (pevent);
    }
#endif
    OS_ENTER_CRITICAL();
    if (pevent->OSEventGrp != 0x00) 
    {                                                       /* 看是否有任務在等待消息郵箱?     */
        tasks_waiting = TRUE;                              /* 是                                      */
    } 
    else 
    {
        tasks_waiting = FALSE;                             /* 否                                       */
    }
    switch (opt) 
    {
        case OS_DEL_NO_PEND:                               /* 只在無任務等待時,刪除郵箱  */
             if (tasks_waiting == FALSE) 
             {
                 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
                 pevent->OSEventPtr  = OSEventFreeList;    /* 返回ECB到空余鏈表中  */
                 OSEventFreeList     = pevent;             /* 加入空余鏈表中        */
                 OS_EXIT_CRITICAL();
                 *err = OS_NO_ERR;
                 return ((OS_EVENT *)0);                   /* 消息郵箱被刪除                 */
             } 
             else 
             {
                 OS_EXIT_CRITICAL();
                 *err = OS_ERR_TASK_WAITING;
                 return (pevent);
             }

        case OS_DEL_ALWAYS:                                /* 即使有任務等待,也要刪除郵箱                */
             while (pevent->OSEventGrp != 0x00) 
             {                                                       /* 就緒所有等待消息郵箱的任務      */
                 OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX);
             }
             pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
             pevent->OSEventPtr  = OSEventFreeList;        /* 返回ECB到空余鏈表中  */
             OSEventFreeList     = pevent;                 /* 加入空余鏈表中        */
             OS_EXIT_CRITICAL();
             if (tasks_waiting == TRUE)
              {                                             /* 如果任務等待重新調度  */
                 OS_Sched();                               /* 尋找最高優先級任務就緒運行  */
             }
             *err = OS_NO_ERR;
             return ((OS_EVENT *)0);                       /* 消息郵箱被刪除                 */

        default:
             OS_EXIT_CRITICAL();
             *err = OS_ERR_INVALID_OPT;
             return (pevent);
    }
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                                      等待郵箱中的消息
*
* 函數描述:   該函數等待發送到郵箱中的消息
*
* 輸入參數  : pevent         指向帶有期望郵箱的ECB的指針
*
*             timeout        選擇延時時間。如果非0,則任務將在指定的延時時間內等待到達郵箱中的消息。如果為0,
*                            則任務將一直等待郵箱中消息的到來。
*             err            指向出錯代碼的指針。其值為:
*
*                            OS_NO_ERR           調用成功,任務收到消息。
*                            OS_TIMEOUT          在指定的延時時間內,沒有收到消息
*                            OS_ERR_EVENT_TYPE   無效的事件類型
*                            OS_ERR_PEND_ISR     從ISR中調用該函數,將導致掛起
*                            OS_ERR_PEVENT_NULL  'pevent' 是一個空指針
*
* 返回值    : != (void *)0   指向接收到消息的指針
*             == (void *)0   沒有消息接收,
*                            'pevent' 是一個空指針,
*                            沒有傳遞給ECB一個恰當的指針.
*********************************************************************************************************
*/

void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3                                /* 為CPU狀態寄存器分配存儲變量           */
    OS_CPU_SR  cpu_sr;
#endif    
    void      *msg;


    if (OSIntNesting > 0) 
    {                                                    /* 如果調用來自 ISR ...                    */
        *err = OS_ERR_PEND_ISR;                           /* ... 從ISR中不能掛起                    */
        return ((void *)0);
    }
#if OS_ARG_CHK_EN > 0
    if (pevent == (OS_EVENT *)0) 
    {                                                    /* 無效的 'pevent'                           */
        *err = OS_ERR_PEVENT_NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产九色sp调教91| 色屁屁一区二区| 精品国产区一区| 免费xxxx性欧美18vr| 91精品国产综合久久精品| 天涯成人国产亚洲精品一区av| 色狠狠av一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 99re热这里只有精品视频| 国产精品久久久久久久久图文区| 成人综合婷婷国产精品久久免费| 国产精品视频线看| 99久久精品国产麻豆演员表| 亚洲欧美电影院| 欧美性一级生活| 日韩主播视频在线| 欧美一二三区在线| 激情小说欧美图片| 欧美激情一区二区三区不卡| 成人一区二区三区视频在线观看 | 91黄视频在线| 一区二区三区四区高清精品免费观看 | 亚洲在线观看免费| 欧美日韩国产色站一区二区三区| 性欧美疯狂xxxxbbbb| 欧美一区二视频| 国产一二精品视频| 国产精品传媒视频| 欧美亚一区二区| 蜜臀久久久99精品久久久久久| 26uuu国产日韩综合| 成人av动漫网站| 一区二区高清免费观看影视大全| 欧美情侣在线播放| 精品一区二区三区的国产在线播放 | 欧美午夜精品一区二区蜜桃| 日韩电影免费在线| 国产性做久久久久久| 91无套直看片红桃| 午夜不卡av免费| 26uuu另类欧美| 91免费看片在线观看| 日韩在线卡一卡二| 国产日韩欧美激情| 在线视频一区二区三| 免费成人美女在线观看| 日本一区二区成人| 欧美日本国产视频| 国产成人亚洲综合a∨婷婷| 亚洲美女在线国产| 日韩免费在线观看| 91小视频在线免费看| 日本伊人色综合网| 中文av一区特黄| 制服丝袜在线91| 成人国产精品视频| 日韩成人免费电影| 国产女人aaa级久久久级| 欧美日韩视频在线一区二区| 国产麻豆精品95视频| 亚洲国产视频一区二区| 欧美精品一区二区在线观看| 日本黄色一区二区| 国产在线不卡视频| 亚洲在线观看免费视频| 久久久久99精品国产片| 欧美日韩国产高清一区二区三区 | 久久精品理论片| 亚洲日本护士毛茸茸| 欧美mv日韩mv国产| 在线精品国精品国产尤物884a| 激情丁香综合五月| 亚洲午夜私人影院| 欧美极品美女视频| 在线不卡a资源高清| www.亚洲色图.com| 久久99精品久久久| 亚洲国产精品一区二区久久 | 最新高清无码专区| 精品免费日韩av| 欧美视频第二页| k8久久久一区二区三区| 美国十次了思思久久精品导航| 亚洲美女视频在线| 久久免费视频一区| 91精品国产综合久久久蜜臀粉嫩| 99久久精品费精品国产一区二区| 精品午夜一区二区三区在线观看| 亚洲成人av在线电影| 亚洲欧洲国产专区| 久久久99精品久久| 日韩三级.com| 欧美老人xxxx18| 欧洲精品中文字幕| 99久久国产免费看| 国产91在线观看| 激情深爱一区二区| 免费一区二区视频| 午夜精品久久久久影视| 亚洲欧洲www| 国产精品毛片a∨一区二区三区| 欧美精品一区二区三区很污很色的| 欧美老肥妇做.爰bbww| 色88888久久久久久影院按摩 | 高清不卡在线观看av| 韩国毛片一区二区三区| 蜜桃久久精品一区二区| 日韩精品亚洲专区| 亚洲国产精品欧美一二99| 亚洲欧美激情视频在线观看一区二区三区| 国产欧美精品区一区二区三区| 亚洲精品一线二线三线无人区| 日韩一级片在线播放| 欧美日韩亚洲综合在线| 欧美丝袜丝交足nylons| 欧美系列一区二区| 在线一区二区三区| 欧美专区亚洲专区| 一本色道久久加勒比精品| 91看片淫黄大片一级在线观看| www.亚洲激情.com| www.一区二区| av成人免费在线| 91亚洲永久精品| 色综合色综合色综合色综合色综合| 不卡的av在线播放| 99久久精品免费| 91网站最新地址| 色婷婷亚洲精品| 欧美在线综合视频| 欧美日韩一区二区三区不卡| 欧美视频一区二区三区四区| 欧美视频一区二区三区四区| 欧美伊人精品成人久久综合97 | 日韩一区二区在线观看视频播放| 51久久夜色精品国产麻豆| 欧美一区二区三区四区在线观看 | 亚洲欧美日韩在线| 亚洲男人电影天堂| 亚洲综合激情网| 日韩二区三区四区| 极品美女销魂一区二区三区| 国产毛片精品国产一区二区三区| 国产成人av资源| 91视频你懂的| 欧美日韩国产综合视频在线观看| 91精品国产免费| 久久免费的精品国产v∧| 国产精品五月天| 亚洲曰韩产成在线| 美女国产一区二区三区| 国产精品一区三区| 91亚洲午夜精品久久久久久| 欧美日韩中文字幕精品| 欧美一区二区观看视频| 久久久久国产精品免费免费搜索| 国产精品福利影院| 亚洲二区在线观看| 韩国成人福利片在线播放| 波多野结衣一区二区三区 | 在线视频一区二区三区| 91精品欧美福利在线观看| 2023国产精品自拍| 中文字幕亚洲电影| 亚洲成人综合视频| 国产老肥熟一区二区三区| 97aⅴ精品视频一二三区| 欧美福利电影网| 国产亚洲一区二区在线观看| 亚洲精品免费电影| 麻豆精品一区二区av白丝在线| 丁香激情综合五月| 欧美日韩卡一卡二| 久久久三级国产网站| 一区二区三区中文在线| 精品一区二区三区在线观看国产| 99久久久免费精品国产一区二区| 欧美精品99久久久**| 国产欧美精品一区二区色综合朱莉| 一区二区三区国产精华| 九九热在线视频观看这里只有精品| 99精品久久只有精品| 日韩一区二区三区av| 亚洲视频狠狠干| 久久99精品国产麻豆婷婷| 99re这里只有精品首页| 日韩女优制服丝袜电影| 亚洲乱码国产乱码精品精98午夜 | 欧美aaa在线| 99免费精品在线观看| 欧美一二三区在线| 亚洲人xxxx| 韩国午夜理伦三级不卡影院| 91久久精品国产91性色tv| 久久美女艺术照精彩视频福利播放 | 性做久久久久久免费观看| 高清免费成人av| 日韩视频在线你懂得| 亚洲男人都懂的| 国产高清成人在线|