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

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

?? os_q.c

?? uCOS源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel*                                        MESSAGE QUEUE MANAGEMENT**                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL*                                           All Rights Reserved**                                                  V2.00** File : OS_Q.C* By   : Jean J. Labrosse**********************************************************************************************************/#ifndef  OS_MASTER_FILE#include "includes.h"#endif#if OS_Q_EN && (OS_MAX_QS >= 2)/***********************************************************************************************************                                           LOCAL DATA TYPES  **********************************************************************************************************/typedef struct os_q {                  /* QUEUE CONTROL BLOCK                                          */    struct os_q   *OSQPtr;             /* Link to next queue control block in list of free blocks      */    void         **OSQStart;           /* Pointer to start of queue data                               */    void         **OSQEnd;             /* Pointer to end   of queue data                               */    void         **OSQIn;              /* Pointer to where next message will be inserted  in   the Q   */    void         **OSQOut;             /* Pointer to where next message will be extracted from the Q   */    INT16U         OSQSize;            /* Size of queue (maximum number of entries)                    */    INT16U         OSQEntries;         /* Current number of entries in the queue                       */} OS_Q;/***********************************************************************************************************                                         LOCAL GLOBAL VARIABLES**********************************************************************************************************/static  OS_Q        *OSQFreeList;              /* Pointer to list of free QUEUE control blocks         */static  OS_Q         OSQTbl[OS_MAX_QS];        /* Table of QUEUE control blocks                        *//*$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*                            if you passed an invalid event type**********************************************************************************************************/void *OSQAccept (OS_EVENT *pevent){    void  *msg;    OS_Q  *pq;    OS_ENTER_CRITICAL();    if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */        OS_EXIT_CRITICAL();        return ((void *)0);    }    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*//***********************************************************************************************************                                        CREATE A MESSAGE QUEUE** Description: This function creates a message queue if free event control blocks are available.** Arguments  : start         is a pointer to the base address of the message queue storage area.  The*                            storage area MUST be declared as an array of pointers to 'void' as follows**                            void *MessageStorage[size]**              size          is the number of elements in the storage area** Returns    : != (void *)0  is a pointer to the event control clock (OS_EVENT) associated with the*                            created queue*              == (void *)0  if no event control blocks were available**********************************************************************************************************/OS_EVENT *OSQCreate (void **start, INT16U 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->OSEventType = OS_EVENT_TYPE_Q;            pevent->OSEventPtr  = pq;            OSEventWaitListInit(pevent);        } 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*//***********************************************************************************************************                                           FLUSH QUEUE** Description : This function is used to flush the contents of the message queue.** Arguments   : none** Returns     : OS_NO_ERR          upon success*               OS_ERR_EVENT_TYPE  If you didn't pass a pointer to a queue**********************************************************************************************************/INT8U OSQFlush (OS_EVENT *pevent){    OS_Q  *pq;        OS_ENTER_CRITICAL();    if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                     */        OS_EXIT_CRITICAL();        return (OS_ERR_EVENT_TYPE);    }    pq             = pevent->OSEventPtr;              /* Point to queue storage structure              */    pq->OSQIn      = pq->OSQStart;    pq->OSQOut     = pq->OSQStart;    pq->OSQEntries = 0;    OS_EXIT_CRITICAL();    return (OS_NO_ERR);}/*$PAGE*//***********************************************************************************************************                                      QUEUE MODULE INITIALIZATION** Description : This function is called by uC/OS-II to initialize the message queue module.  Your*               application MUST NOT call this function.** Arguments   :  none** Returns     : none**********************************************************************************************************/void OSQInit (void){    INT16U i;    for (i = 0; i < (OS_MAX_QS - 1); i++) {      /* Init. list of free QUEUE control blocks            */        OSQTbl[i].OSQPtr = &OSQTbl[i+1];    }    OSQTbl[OS_MAX_QS - 1].OSQPtr = (OS_Q *)0;    OSQFreeList                  = &OSQTbl[0];}/*$PAGE*//***********************************************************************************************************                                     PEND ON A QUEUE FOR A MESSAGE** Description: This function waits for a message to be sent to a queue** Arguments  : pevent        is a pointer to the event control block associated with the desired queue**              timeout       is an optional timeout period (in clock ticks).  If non-zero, your task will*                            wait for a message to arrive at the queue up to the amount of time *                            specified by this argument.  If you specify 0, however, your task will wait *                            forever at the specified queue or, until a message arrives.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看不卡av| 欧美日韩午夜在线视频| 亚洲成人av在线电影| 精品久久久久一区二区国产| av午夜精品一区二区三区| 裸体健美xxxx欧美裸体表演| 伊人开心综合网| 国产精品入口麻豆九色| 91精品国产免费| 色哟哟在线观看一区二区三区| 久久99国产精品尤物| 香蕉久久夜色精品国产使用方法| 国产欧美一区二区精品性| 欧美一区二区三区人| 在线免费观看日本一区| 不卡视频一二三| 国精产品一区一区三区mba桃花| 亚洲图片一区二区| 亚洲特级片在线| 欧美激情一区二区三区全黄| 精品免费视频一区二区| 7777精品久久久大香线蕉| 在线观看精品一区| 97精品电影院| 99视频国产精品| 大美女一区二区三区| 国产麻豆精品视频| 国内精品国产三级国产a久久| 日日夜夜免费精品视频| 亚洲国产精品一区二区www| 亚洲欧美一区二区三区国产精品| 欧美激情一区二区在线| 亚洲国产精品成人综合| 久久久久99精品国产片| 久久蜜桃一区二区| 精品国产凹凸成av人网站| 日韩精品在线一区| 日韩视频在线你懂得| 日韩一卡二卡三卡| 日韩美女视频在线| 欧美成人免费网站| 精品sm在线观看| 久久综合九色综合97婷婷| 久久综合成人精品亚洲另类欧美| 欧美一区二区三区免费在线看 | 欧美视频一区二区三区四区| 色欧美片视频在线观看在线视频| 91蜜桃免费观看视频| 色婷婷激情一区二区三区| 色综合久久综合网97色综合 | 欧美午夜寂寞影院| 欧美日韩日日摸| 69av一区二区三区| 精品免费日韩av| 国产日韩成人精品| 国产精品每日更新| 亚洲精品成人悠悠色影视| 一区二区理论电影在线观看| 亚洲无人区一区| 丝袜亚洲另类欧美综合| 免费高清在线视频一区·| 激情综合色综合久久| 国产不卡一区视频| 在线观看日韩精品| 日韩一卡二卡三卡国产欧美| 国产欧美一区二区精品性| 亚洲欧美日韩国产综合| 亚洲第一成人在线| 精品一区二区三区蜜桃| 丰满少妇久久久久久久| 色哟哟一区二区在线观看| 678五月天丁香亚洲综合网| 久久蜜臀精品av| 亚洲精品菠萝久久久久久久| 午夜电影久久久| 国产黄人亚洲片| 色哦色哦哦色天天综合| 日韩欧美电影一区| 国产精品久久久久久妇女6080| 一区二区三区四区中文字幕| 蜜臀久久久久久久| 丁香啪啪综合成人亚洲小说| 欧美久久久久久蜜桃| 久久精品在这里| 亚洲主播在线观看| 国产91精品一区二区麻豆亚洲| 色av成人天堂桃色av| 精品久久久久一区二区国产| 一区二区三区成人在线视频| 韩日精品视频一区| 在线观看日韩国产| 国产人成亚洲第一网站在线播放| 午夜私人影院久久久久| 丁香婷婷综合五月| 欧美一级二级在线观看| 亚洲男女毛片无遮挡| 国产麻豆视频一区二区| 这里只有精品免费| 亚洲色图.com| 国产高清成人在线| 日韩欧美国产精品一区| 一区二区三区资源| 福利91精品一区二区三区| 4438x成人网最大色成网站| 亚洲精品日韩综合观看成人91| 黄色精品一二区| 91精品国产综合久久久久久| 一区精品在线播放| 国产成人免费9x9x人网站视频| 欧美一区二区三区在线视频| 亚洲免费毛片网站| 国产aⅴ综合色| www国产成人| 麻豆精品在线视频| 欧美日韩高清不卡| 日韩免费看的电影| 亚洲一区免费观看| 91麻豆国产香蕉久久精品| 2021久久国产精品不只是精品| 亚洲综合色网站| 国产一区二区在线观看免费| 91精品国产综合久久精品| 亚洲欧美日韩国产成人精品影院 | 另类小说图片综合网| 欧美三日本三级三级在线播放| 国产精品私房写真福利视频| 韩国av一区二区三区| 7777精品伊人久久久大香线蕉经典版下载| 国产精品欧美久久久久一区二区 | 韩国一区二区在线观看| 色就色 综合激情| 日韩美女视频一区| 成人国产视频在线观看| 久久久久国产精品麻豆| 精品一区二区免费| 欧美日韩在线电影| 亚洲国产欧美日韩另类综合| 91同城在线观看| 国产日韩欧美亚洲| 日本不卡在线视频| 91精品婷婷国产综合久久竹菊| 亚洲男人天堂av| 91麻豆swag| 一区在线中文字幕| 欧美性猛交xxxxxx富婆| 亚洲精品视频免费观看| 91国偷自产一区二区开放时间| 成人欧美一区二区三区在线播放| 成人自拍视频在线观看| 国产亲近乱来精品视频| 国产精品自拍一区| 国产清纯美女被跳蛋高潮一区二区久久w| 久久精品国产亚洲一区二区三区| 欧美一区二区福利视频| 国产精品一区二区x88av| 欧美国产日韩一二三区| 成人小视频在线| 亚洲欧美中日韩| 不卡在线视频中文字幕| 亚洲最大成人综合| 欧美人成免费网站| 蜜桃一区二区三区四区| 久久尤物电影视频在线观看| 成人18视频日本| 亚洲免费视频成人| 7777精品伊人久久久大香线蕉的| 免费成人在线观看视频| 欧美二区三区的天堂| 国产一区二区按摩在线观看| 国产欧美日韩卡一| 91丨九色porny丨蝌蚪| 亚洲电影一级黄| 国产亚洲人成网站| av在线不卡网| 午夜激情一区二区| 精品国产露脸精彩对白| 在线观看一区二区视频| 日本不卡一区二区三区| 久久新电视剧免费观看| 99久久婷婷国产综合精品| 亚洲免费视频成人| 久久亚洲精精品中文字幕早川悠里| 成人免费av资源| 亚洲国产中文字幕| 欧美成人猛片aaaaaaa| 在线精品观看国产| 紧缚奴在线一区二区三区| 国产精品国产三级国产普通话99| 欧美最猛性xxxxx直播| 免费一级欧美片在线观看| 国产人伦精品一区二区| 欧美综合亚洲图片综合区| 美腿丝袜亚洲一区| 亚洲一二三四在线观看| 欧美精品一区二区三| 色婷婷国产精品综合在线观看| 免费成人av在线| 亚洲一二三四区| 国产精品网站在线观看| 91精品国产福利在线观看|