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

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

?? os_q.c

?? 本文介紹了_C/OS-II概況和ARM體系結構中與移植工作相關的一些概念
?? 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 = (OS_Q  *)(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             = (OS_Q  *)(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.**              err           is a pointer to where an error message will be deposited.  Possible error*                            messages are:**                            OS_NO_ERR         The call was successful and your task received a message.*                            OS_TIMEOUT        A message was not received within the specified timeout*                            OS_ERR_EVENT_TYPE You didn't pass a pointer to a queue*                            OS_ERR_PEND_ISR    If you called this function from an ISR and the result*                                               would lead to a suspension.** Returns    : != (void *)0  is a pointer to the message received*              == (void *)0  if no message was received or you didn't pass a pointer to a queue.**********************************************************************************************************/void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err){    void  *msg;    OS_Q  *pq;    OS_ENTER_CRITICAL();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品一区二区三区嫩草| 国产精品的网站| 久久久久久免费网| 亚洲精品成人少妇| 免费人成黄页网站在线一区二区| 国产精品影视网| 欧美视频中文字幕| 国产日韩三级在线| 美女网站视频久久| 91国产福利在线| 欧美国产日本韩| 国产精品一区二区三区乱码| 欧美日韩国产高清一区二区| 中文字幕一区免费在线观看| 极品瑜伽女神91| 欧美二区在线观看| 亚洲一区二区三区四区在线| www.欧美亚洲| 国产欧美一区二区三区鸳鸯浴| 青青草国产精品97视觉盛宴| 欧美亚洲一区三区| 亚洲品质自拍视频| av在线不卡免费看| 国产精品久久久久影视| 国产美女主播视频一区| 日韩女优视频免费观看| 日韩高清不卡一区二区三区| 欧美午夜片在线观看| 玉足女爽爽91| 日本精品视频一区二区| 日韩一区日韩二区| 99国产精品久久久久久久久久| 国产日韩三级在线| 成人av一区二区三区| 国产精品色在线观看| 成人激情校园春色| 亚洲欧洲国产专区| 91久久奴性调教| 亚洲成人1区2区| 欧美精品久久久久久久久老牛影院| 亚洲一区二区精品3399| 欧美熟乱第一页| 免费在线观看成人| 精品久久久久一区二区国产| 精品一区二区三区免费播放 | 偷拍与自拍一区| 欧美伊人久久大香线蕉综合69| 亚洲自拍偷拍综合| 欧美日本一区二区在线观看| 亚洲va韩国va欧美va| 欧美精品日日鲁夜夜添| 午夜精品久久久久久久99水蜜桃| 欧美日本在线一区| 激情偷乱视频一区二区三区| 久久精品亚洲精品国产欧美| 国产成人8x视频一区二区| 《视频一区视频二区| 欧美在线影院一区二区| 首页国产欧美久久| 久久综合九色欧美综合狠狠 | 欧美国产在线观看| 91亚洲精品久久久蜜桃网站| 午夜精品福利一区二区三区蜜桃| 欧美一区二区黄| 不卡欧美aaaaa| 亚洲大片一区二区三区| 欧美成va人片在线观看| 成人h版在线观看| 亚洲夂夂婷婷色拍ww47| 欧美大黄免费观看| 97精品久久久午夜一区二区三区| 亚洲自拍另类综合| 久久综合九色综合欧美就去吻| 91在线视频在线| 裸体在线国模精品偷拍| **性色生活片久久毛片| 欧美一区二区三区电影| www.亚洲精品| 美女视频黄a大片欧美| **性色生活片久久毛片| 欧美mv和日韩mv的网站| 日本乱人伦aⅴ精品| 国模娜娜一区二区三区| 性做久久久久久免费观看| 国产欧美一区二区在线| 日韩一区二区在线播放| 91日韩在线专区| 国产在线一区二区综合免费视频| 一级中文字幕一区二区| 久久免费的精品国产v∧| 欧美三级在线视频| 91尤物视频在线观看| 国产自产高清不卡| 日本va欧美va精品发布| 一区二区三区中文字幕在线观看| 2020国产成人综合网| 777精品伊人久久久久大香线蕉| 91在线视频在线| 成人aaaa免费全部观看| 国产一区二区视频在线| 日韩电影网1区2区| 亚洲成人一二三| 一区二区三区中文免费| 欧美韩国一区二区| 欧美激情一区二区三区四区| 精品成a人在线观看| 欧美一区二区三区婷婷月色 | 亚洲午夜电影网| 亚洲人成在线播放网站岛国| 2020日本不卡一区二区视频| 欧美一区二区视频在线观看| 欧美日韩mp4| 欧美日韩在线综合| 欧美日韩国产区一| 欧美美女bb生活片| 欧美日韩国产免费| 欧美亚洲另类激情小说| 欧美中文字幕一区二区三区| 91黄色在线观看| 在线精品观看国产| 欧美日韩中字一区| 欧美日韩另类一区| 欧美一区二区视频免费观看| 91麻豆精品91久久久久同性| 欧美二区乱c少妇| 欧美一级欧美三级在线观看| 日韩美女视频在线| 精品国产乱码久久久久久免费| 欧美mv日韩mv国产网站app| 精品久久一区二区三区| 亚洲国产成人一区二区三区| 日本一区二区三区久久久久久久久不| 26uuuu精品一区二区| 国产校园另类小说区| 综合欧美一区二区三区| 亚洲国产综合91精品麻豆| 午夜精品福利一区二区三区av| 日日夜夜精品视频天天综合网| 日韩成人伦理电影在线观看| 久久99精品国产.久久久久| 韩国成人精品a∨在线观看| 成人动漫在线一区| 欧美日韩一区二区不卡| 日韩欧美亚洲一区二区| 国产精品国产成人国产三级| 亚洲福利一区二区三区| 久久99国内精品| 色天天综合色天天久久| 91精品国产高清一区二区三区蜜臀| 精品国产一区a| 亚洲免费在线观看| 美女视频一区在线观看| 成人国产精品视频| 欧美日韩高清影院| 国产拍欧美日韩视频二区| 亚洲影院在线观看| 国产美女久久久久| 91搞黄在线观看| 久久精品男人的天堂| 一区二区三区在线免费视频| 国产一区二区久久| 欧美日韩国产一区| 亚洲丝袜自拍清纯另类| 久久国产尿小便嘘嘘| 色欧美乱欧美15图片| 精品国产第一区二区三区观看体验| 综合色天天鬼久久鬼色| 国产一区高清在线| 欧美日韩另类一区| 亚洲欧美日韩国产综合在线| 久久电影网站中文字幕| 色诱亚洲精品久久久久久| 精品入口麻豆88视频| 亚洲午夜私人影院| 成人国产精品免费观看视频| 日韩午夜在线观看| 一区二区欧美国产| 白白色亚洲国产精品| 日韩一区二区在线播放| 午夜av区久久| 在线观看视频一区二区欧美日韩| 精品国产乱码久久久久久1区2区| 亚洲主播在线观看| 91色视频在线| 亚洲品质自拍视频| 成人午夜碰碰视频| 久久久久久久久一| 久草在线在线精品观看| 91精品欧美福利在线观看| 夜夜精品视频一区二区| 94-欧美-setu| 日韩一区在线免费观看| k8久久久一区二区三区| 欧美极品美女视频| 国产一区二三区好的| 国产午夜精品久久久久久久| 国内精品在线播放| 久久精品视频免费| 国产精品一区二区男女羞羞无遮挡| 337p亚洲精品色噜噜|