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

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

?? queue.c

?? SmartARM2400開發(fā)平臺配套例程
?? C
字號:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			    queue.c
** Last modified Date:      2007-09-20
** Last Version:		    1.0
** Descriptions:		    中間件函數(shù)
**
**--------------------------------------------------------------------------------------------------------
** Created by:			    chengmingji
** Created date:		    2007-07-15
** Version:				    1.0
** Descriptions:		    
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			    lixiaocheng
** Modified Date:		    2007-09-20
** Version:				    1.0
** Descriptions:		    對排版格式進行了調(diào)整
**
*********************************************************************************************************/
#include "config.h"

/*********************************************************************************************************
** Function name:           QueueCreate
** Descriptions:            初始化數(shù)據(jù)隊列
** Input parameters:        Buf      :為隊列分配的存儲空間地址
**                          SizeOfBuf:為隊列分配的存儲空間大小(字節(jié))
**                          ReadEmpty:為隊列讀空時處理程序
**                          WriteFull:為隊列寫滿時處理程序
** Output parameters:       NONE
** Returned value:          NOT_OK  :參數(shù)錯誤
**                          QUEUE_OK:成功
*********************************************************************************************************/
int QueueCreate (void      *Buf,
                 uint32     SizeOfBuf,
                 uint8   (* ReadEmpty)(),
                 uint8   (* WriteFull)()
                 )
{
    DataQueue *Queue;
    if (Buf != NULL && SizeOfBuf >= (sizeof(DataQueue))) {              /* 判斷參數(shù)是否有效             */
        Queue = (DataQueue *)Buf;

        OS_ENTER_CRITICAL(); 
                                                                        /* 初始化結構體數(shù)據(jù)             */
        Queue->MaxData = (uint16)((SizeOfBuf - (uint32)(((DataQueue *)0)->Buf)) / 
                         sizeof(QUEUE_DATA_TYPE));                      /* 計算隊列可以存儲的數(shù)據(jù)數(shù)目   */
        Queue->End = Queue->Buf + Queue->MaxData;                       /* 計算數(shù)據(jù)緩沖的結束地址       */
        Queue->Out = Queue->Buf;
        Queue->In = Queue->Buf;
        Queue->NData = 0;
        Queue->ReadEmpty = ReadEmpty;
        Queue->WriteFull = WriteFull;

        OS_EXIT_CRITICAL();

        return QUEUE_OK;
    } else {
        return NOT_OK;
    }
}


/*********************************************************************************************************
** Function name:           QueueRead
** Descriptions:            獲取隊列中的數(shù)據(jù)
** Input parameters:        Ret:存儲返回的消息的地址
**                          Buf:指向隊列的指針
** Output parameters:       NONE
** Returned value:          NOT_OK     :參數(shù)錯誤
**                          QUEUE_OK   :收到消息
**                          QUEUE_EMPTY:隊列空
*********************************************************************************************************/
int QueueRead (QUEUE_DATA_TYPE *Ret, void *Buf)
{
    int err;
    DataQueue *Queue;

    err = NOT_OK;
    if (Buf != NULL) {                                                  /* 隊列是否有效                 */
        Queue = (DataQueue *)Buf;
        
        OS_ENTER_CRITICAL();
        
        if (Queue->NData > 0) {                                         /* 隊列是否為空                 */                                                               
            *Ret = Queue->Out[0];                                       /* 數(shù)據(jù)出隊                     */
            Queue->Out++;                                               
            
            if (Queue->Out >= Queue->End) {                             /* 調(diào)整出隊指針                 */
                Queue->Out = Queue->Buf;
            }
            
            Queue->NData--;                                             /* 數(shù)據(jù)減少                     */
            err = QUEUE_OK;
        } else {                                                               
            err = QUEUE_EMPTY;
            
            if (Queue->ReadEmpty != NULL) {                             /* 空,調(diào)用用戶處理函數(shù)         */
                err = Queue->ReadEmpty(Ret, Queue);
            }
        }
        OS_EXIT_CRITICAL();
    }
    return err;
}

/*********************************************************************************************************
** Function name:           QueueWrite
** Descriptions:            FIFO方式發(fā)送數(shù)據(jù)
** Input parameters:        Buf :指向隊列的指針
**                          Data:發(fā)送的數(shù)據(jù)
** Output parameters:       NONE
** Returned value:          NOT_OK    : 參數(shù)錯誤
**                          QUEUE_FULL: 隊列滿
**                          QUEUE_OK  : 發(fā)送成功
*********************************************************************************************************/
#ifndef EN_QUEUE_WRITE
#define EN_QUEUE_WRITE      1
#endif

#if EN_QUEUE_WRITE > 0

int QueueWrite (void *Buf, QUEUE_DATA_TYPE Data)
{
    int err;
    DataQueue *Queue;

    err = NOT_OK;
    if (Buf != NULL) {                                                  /* 隊列是否有效                 */
        Queue = (DataQueue *)Buf;
        
        OS_ENTER_CRITICAL(); 
        
        if (Queue->NData < Queue->MaxData) {                            /* 隊列是否滿                   */
            Queue->In[0] = Data;                                        /* 數(shù)據(jù)入隊                     */
            Queue->In++;
                                                           
            if (Queue->In >= Queue->End) {                              /* 調(diào)整入隊指針                 */
                Queue->In = Queue->Buf;
            }
            
            Queue->NData++;                                             /* 數(shù)據(jù)增加                     */
            err = QUEUE_OK;
        } else {                                                        /* 滿                           */
            err = QUEUE_FULL;
            if (Queue->WriteFull != NULL) {                             /* 調(diào)用用戶處理函數(shù)             */
                err = Queue->WriteFull(Queue, Data, Q_WRITE_MODE);
            }
        }
        OS_EXIT_CRITICAL();
    }
    return err;
}
#endif                                                                  /* EN_QUEUE_WRITE               */

/*********************************************************************************************************
** Function name:           QueueWriteFront
** Descriptions:            LIFO方式發(fā)送數(shù)據(jù)
** Input parameters:        Buf :指向隊列的指針
**                          Data:發(fā)送的數(shù)據(jù)
** Output parameters:       NONE
** Returned value:          NOT_OK    : 參數(shù)錯誤
**                          QUEUE_FULL: 隊列滿
**                          QUEUE_OK  : 發(fā)送成功
*********************************************************************************************************/
#ifndef EN_QUEUE_WRITE_FRONT
#define EN_QUEUE_WRITE_FRONT    0
#endif

#if EN_QUEUE_WRITE_FRONT > 0

uint8 QueueWriteFront (void *Buf, QUEUE_DATA_TYPE Data)
{
    uint8 err;
    DataQueue *Queue;

    err = NOT_OK;
    if (Buf != NULL) {                                                  /* 隊列是否有效                 */
        Queue = (DataQueue *)Buf;
        
        OS_ENTER_CRITICAL();
        if (Queue->NData < Queue->MaxData) {                            /* 隊列是否滿                   */
            Queue->Out--; 
                                                          
            if (Queue->Out < Queue->Buf) {                              /* 調(diào)整出隊指針                 */
            
                Queue->Out = Queue->End - 1;
            }
            
            Queue->Out[0] = Data;                                       /* 數(shù)據(jù)入隊                     */
            Queue->NData++;                                             /* 數(shù)據(jù)數(shù)目增加                 */
            err = QUEUE_OK;
        } else {                                                        /* 滿                           */
            err = QUEUE_FULL;
            if (Queue->WriteFull != NULL) {                             /* 調(diào)用用戶處理函數(shù)             */
                err = Queue->WriteFull(Queue, Data, Q_WRITE_FRONT_MODE);
            }
        }
        OS_EXIT_CRITICAL();
    }
    return err;
}

#endif                                                                  /* EN_QUEUE_WRITE_FRONT         */

/*********************************************************************************************************
** Function name:           QueueNData
** Descriptions:            取得隊列中數(shù)據(jù)數(shù)
** Input parameters:        Buf :指向隊列的指針
** Output parameters:       NONE
** Returned value:          隊列包含數(shù)據(jù)數(shù)
*********************************************************************************************************/
#ifndef EN_QUEUE_NDATA
#define EN_QUEUE_NDATA    0
#endif

#if EN_QUEUE_NDATA > 0

uint16 QueueNData (void *Buf)
{
    uint16 temp;
    
    temp = 0;                                                           /* 隊列無效返回0                */
    
    if (Buf != NULL) {
        OS_ENTER_CRITICAL(); 
        temp = ((DataQueue *)Buf)->NData;
        OS_EXIT_CRITICAL();
    }
    return temp;
}

#endif                                                                  /* EN_QUEUE_NDATA               */

/*********************************************************************************************************
** Function name:           QueueSize
** Descriptions:            取得隊列總容量
** Input parameters:        Buf :指向隊列的指針
** Output parameters:       NONE
** Returned value:          隊列總容量
*********************************************************************************************************/
#ifndef EN_QUEUE_SIZE
#define EN_QUEUE_SIZE    0
#endif

#if EN_QUEUE_SIZE > 0

uint16 QueueSize (void *Buf)
{
    uint16 temp;
    
    temp = 0;                                                           /* 隊列無效返回0                */
    
    if (Buf != NULL) {
        OS_ENTER_CRITICAL();
        temp = ((DataQueue *)Buf)->MaxData;
        OS_EXIT_CRITICAL();
    }
    return temp;
}

#endif                                                                  /* EN_QUEUE_SIZE                */

/*********************************************************************************************************
** Function name:           OSQFlush
** Descriptions:            清空隊列
** Input parameters:        Buf :指向隊列的指針
** Output parameters:       NONE
** Returned value:          NONE
*********************************************************************************************************/
#ifndef EN_QUEUE_FLUSH
#define EN_QUEUE_FLUSH    1
#endif

#if EN_QUEUE_FLUSH > 0

void QueueFlush (void *Buf)
{
    DataQueue *Queue;
    
    if (Buf != NULL) {                                                  /* 隊列是否有效                 */
        Queue = (DataQueue *)Buf;
        OS_ENTER_CRITICAL();
        Queue->Out = Queue->Buf;
        Queue->In = Queue->Buf;
        Queue->NData = 0;                                               /* 數(shù)據(jù)數(shù)目為0                  */
        OS_EXIT_CRITICAL();
    }
}

#endif                                                                  /* EN_QUEUE_FLUSH               */

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人免费电影| 亚洲色图.com| 韩国一区二区三区| 久久欧美中文字幕| 粉嫩av一区二区三区粉嫩| 久久超碰97人人做人人爱| 日韩视频一区在线观看| 国产精品一线二线三线| 久久久久综合网| av毛片久久久久**hd| 亚洲国产综合人成综合网站| 欧美日高清视频| 国产一区二区女| 国产精品欧美精品| 欧美性videosxxxxx| 久久精品72免费观看| 中文字幕乱码亚洲精品一区| 欧美日韩中文一区| 久久国产精品99久久久久久老狼| 久久精品亚洲国产奇米99| 91视频观看免费| 男女激情视频一区| 日本一区二区三区电影| 在线观看日韩高清av| 极品销魂美女一区二区三区| 国产精品伦一区二区三级视频| 欧美怡红院视频| 国产毛片精品视频| 亚洲精品国产品国语在线app| 欧美成人一区二区| 色婷婷精品久久二区二区蜜臀av| 青椒成人免费视频| 中文字幕日本乱码精品影院| 欧美一区二区女人| 91免费观看视频| 韩国av一区二区| 在线看国产一区二区| 欧美美女直播网站| 国产美女主播视频一区| 午夜影视日本亚洲欧洲精品| 麻豆国产精品官网| 国产三级一区二区| 成人一级片在线观看| 国产精品一区二区三区乱码| 国产91在线观看| k8久久久一区二区三区| 99re66热这里只有精品3直播| 成人动漫在线一区| 一本色道久久综合狠狠躁的推荐 | 亚洲精品国产无套在线观| 亚洲天堂精品在线观看| 亚洲最新在线观看| 天天综合网 天天综合色| 日韩国产欧美在线观看| 九九国产精品视频| 国产福利一区在线| 成人精品国产福利| 日本久久精品电影| 欧美一区二区三区在线视频| 欧美草草影院在线视频| 国产精品毛片无遮挡高清| 国产精品一区二区三区99| 丰满少妇久久久久久久| 成人99免费视频| 精品视频一区二区不卡| 欧美成人精品二区三区99精品| 欧美激情一区在线观看| 亚洲综合色成人| 麻豆久久一区二区| 成人av动漫网站| 欧美日韩国产系列| 久久免费午夜影院| 一区二区在线免费观看| 青青草97国产精品免费观看无弹窗版 | 99在线热播精品免费| 欧美色综合网站| 精品日韩av一区二区| 国产精品久久久久久久久动漫 | 亚洲一区av在线| 紧缚捆绑精品一区二区| 91首页免费视频| 精品电影一区二区| 亚洲黄色免费电影| 精品一区二区三区影院在线午夜| 99精品视频免费在线观看| 日韩一区二区在线观看视频播放| 亚洲欧洲精品一区二区三区| 视频一区视频二区在线观看| 成人精品在线视频观看| 日韩一级完整毛片| 成人欧美一区二区三区黑人麻豆 | 91亚洲国产成人精品一区二区三 | 丁香六月综合激情| 欧美久久免费观看| 日韩理论片网站| 国产激情精品久久久第一区二区 | 2024国产精品| 天天色图综合网| 91色乱码一区二区三区| 欧美变态tickling挠脚心| 樱花草国产18久久久久| 国产成人精品在线看| 欧美mv和日韩mv的网站| 亚洲猫色日本管| 岛国精品一区二区| ww亚洲ww在线观看国产| 视频一区在线播放| 在线亚洲免费视频| 最新国产精品久久精品| 欧美一级日韩不卡播放免费| 一区二区三区在线视频观看| 成a人片亚洲日本久久| 久久欧美中文字幕| 久久精品噜噜噜成人av农村| 正在播放亚洲一区| 亚洲成人在线观看视频| 在线精品视频一区二区三四| 亚洲天堂a在线| 99久久精品久久久久久清纯| 亚洲国产精品成人久久综合一区| 韩日av一区二区| 欧美刺激脚交jootjob| 天使萌一区二区三区免费观看| 欧洲精品一区二区| 一区二区三区欧美| 99精品久久久久久| 亚洲天堂网中文字| 99久久精品国产一区| 中文字幕一区二区视频| 波多野结衣在线aⅴ中文字幕不卡| 久久一区二区视频| 国产综合久久久久久久久久久久 | 亚洲国产精品久久久久秋霞影院 | 亚洲国产一区二区三区青草影视| 99久久久免费精品国产一区二区| 中文字幕免费在线观看视频一区| 国v精品久久久网| 欧美激情在线看| 精品国产免费人成电影在线观看四季 | 国内成人自拍视频| 日韩精品在线看片z| 精品夜夜嗨av一区二区三区| 精品理论电影在线| 国产精品一区二区久久不卡 | 99久久国产综合精品色伊| 国产精品久久综合| 99久久精品久久久久久清纯| 亚洲激情欧美激情| 欧美在线一区二区| 亚洲成人av在线电影| 日韩无一区二区| 国产一级精品在线| 国产精品进线69影院| 91成人国产精品| 男女男精品视频| 久久精品视频一区二区三区| 成人午夜看片网址| 亚洲精品成人天堂一二三| 欧美日韩亚洲丝袜制服| 蜜桃久久精品一区二区| 久久久久国产精品人| 99久久久精品免费观看国产蜜| 亚洲gay无套男同| 26uuu欧美日本| 波波电影院一区二区三区| 亚洲国产sm捆绑调教视频 | 国产蜜臀av在线一区二区三区| 99re亚洲国产精品| 午夜精品成人在线| 2021久久国产精品不只是精品| 成人精品国产一区二区4080| 一区二区三区四区不卡视频| 91精品国产品国语在线不卡| 成人一区二区三区视频在线观看 | 5858s免费视频成人| 国产不卡视频在线播放| 亚洲国产乱码最新视频 | 91精品国产综合久久久久久久久久 | 91免费精品国自产拍在线不卡| 午夜久久福利影院| 日本一区二区三级电影在线观看| 日本丶国产丶欧美色综合| 精品在线视频一区| 有坂深雪av一区二区精品| 精品国产一二三区| 欧美日韩视频在线一区二区| 国产专区欧美精品| 一区二区三区高清不卡| 久久久91精品国产一区二区三区| 在线免费观看不卡av| 国产精品亚洲成人| 日韩av中文在线观看| 亚洲欧美日韩电影| www成人在线观看| 欧美福利视频一区| 99久久综合狠狠综合久久| 久久99久久精品| 亚洲二区视频在线| 亚洲欧洲av在线| 欧美大片拔萝卜|