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

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

?? os_q.c

?? SmallRTOSAVR.rar
?? C
字號:
/*********************************************************************************************************
**                                        Small RTOS
**                                   The Real-Time Kernel
**                           (c) Copyright 2002-2003, chenmingji
**                                     All Rights Reserved
**                                         V1.50.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: OS_Q.C
**創   建   人: 陳明計
**最后修改日期: 2004年9月5日
**描        述: Small RTOS 消息隊列處理代碼
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 陳明計
** 版  本: V1.00
** 日 期: 2004年9月5日
** 描 述: 基本完成全新的Small RTOS核
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:     
** 描 述:
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 焦進星
** 日 期: 2007年12月30日
** 描 述: 移植到AVR系列芯片,適用于atmega16/32等
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#define  IN_OS_Q
#define  IN_OS
#include "..\APP\config.h"

#if OS_MAX_EVENTS > 0
/* 增加刪除消息隊列 */
#if EN_OS_Q > 0
/*********************************************************************************************************
** 函數名稱: OSQCreate
** 功能描述: 初始化消息隊列
** 輸 入: Buf:為隊列分配的存儲空間地址
**         SizeOfBuf:為隊列分配的存儲空間大小
** 輸 出: 事件指針,NULL為不成功
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        OS_EVENT * OSQCreate(void *Buf, uint8 SizeOfBuf)
{
    OS_EVENT *Rt=NULL;
    OS_Q *QPtr;
    
    if (Buf != NULL && SizeOfBuf >= (sizeof(OS_Q)))             /* 判斷參數是否有效 */
    {
        OS_ENTER_CRITICAL();
        Rt = OSEventNew();
        if (Rt != NULL)
        {
            QPtr = (OS_Q *)Buf;
            Rt->OSEventType = OS_EVENT_Q;
            Rt->EventData.OSQPtr = QPtr;
                                                                /* 初始化結構體數據 */
            QPtr->MaxData = (SizeOfBuf - (uint32)(((OS_Q *)0)->Buf)) / 
                         sizeof(void *);                          /* 計算隊列可以存儲的數據數目 */
            QPtr->End = QPtr->Buf + QPtr->MaxData;              /* 計算數據緩沖的結束地址 */
            QPtr->Out = QPtr->Buf;
            QPtr->In = QPtr->Buf;
            QPtr->NData = 0;
        }
        OS_EXIT_CRITICAL();
    }
    return Rt;
}

/*********************************************************************************************************
** 函數名稱: OSQPend
** 功能描述: 等待消息隊列中的消息
** 輸 入: pEvent:指向隊列的指針
**         Tick:等待時間
**         err:用于返回狀態
**             OS_NO_ERR:成功
**             OS_ERR_PEVENT_NULL:事件指針為空
**             OS_ERR_EVENT_TYPE:錯誤事件類型
**             OS_ERR_PEND_ISR:在IRS中等待事件
**             OS_EVENT_DEL:事件被刪除
**             OS_TIMEOUT:超時
** 輸 出: 消息,NULL為無消息
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: a
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_PENT > 0

        void * OSQPend(OS_EVENT * pEvent, uint16 Tick, uint8 *err)
{
    OS_Q *QPtr;
    void *Rt;
    
    if (pEvent == NULL)
    {
        *err = OS_ERR_PEVENT_NULL;
        return NULL;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        *err = OS_ERR_EVENT_TYPE;
        Rt = NULL;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
    
    *err = OS_NO_ERR;
    if (QPtr->NData == 0)                       /* 隊列是否為空 */
    {
        *err = OSEventWait(pEvent, Tick);
    }
    if (*err != OS_NO_ERR)
    {
        Rt = NULL;
        goto Error;
    }
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列    */
    {
        *err = OS_EVENT_DEL;                    /* 事件被刪除           */
        Rt = NULL;
        goto Error;
    }
    if (QPtr->NData == 0)                        /* 隊列是否為空 */
    {
        *err = OS_TIMEOUT;
        Rt = NULL;
        goto Error;
    }

    Rt = QPtr->Out[0];                          /* 消息出隊     */
    QPtr->Out++;                                /* 調整出隊指針 */
    if (QPtr->Out >= QPtr->End)
    {
        QPtr->Out = QPtr->Buf;
    }
    QPtr->NData--;                              /* 數據減少      */
    *err = OS_NO_ERR;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSQAccept
** 功能描述: 無等待從消息隊列中取得消息
** 輸 入: pEvent:指向隊列的指針
** 輸 出: 消息,NULL為無消息
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_ACCEPT > 0
        void * OSQAccept(OS_EVENT * pEvent)
{
    OS_Q *QPtr;
    void *Rt;
    
    if (pEvent == NULL)
    {
        return NULL;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        Rt = NULL;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
        
    if (QPtr->NData == 0)                        /* 隊列是否為空 */
    {
        Rt = NULL;
        goto Error;
    }

    Rt = QPtr->Out[0];                          /* 消息出隊     */
    QPtr->Out++;                                /* 調整出隊指針 */
    if (QPtr->Out >= QPtr->End)
    {
        QPtr->Out = QPtr->Buf;
    }
    QPtr->NData--;                              /* 數據減少      */

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif


/*********************************************************************************************************
** 函數名稱: OSQPost
** 功能描述: FIFO方式發送消息
** 輸 入: pEvent:指向隊列的指針
**         Msg:發送的消息
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
**         OS_ERR_POST_NULL_PTR:發送消息指針為空
**         OS_Q_FULL:隊列滿
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_POST > 0
        uint8 OSQPost(OS_EVENT * pEvent, void *Msg)
{
    OS_Q *QPtr;
    uint8 Rt;
    
    if (pEvent == NULL)
    {
        return OS_ERR_PEVENT_NULL;
    }
    
    if (Msg == NULL)
    {
        return OS_ERR_POST_NULL_PTR;
    }
    
    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        Rt = OS_ERR_EVENT_TYPE;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
        
    if (QPtr->NData >= QPtr->MaxData)           /* 隊列是否滿 */
    {
        Rt = OS_Q_FULL;
        goto Error;
    }

    QPtr->In[0] = Msg;                          /* 數據入隊    */
    QPtr->In++;                                 /* 調整入隊指針*/
    if (QPtr->In >= QPtr->End)
    {
        QPtr->In = QPtr->Buf;
    }
    QPtr->NData++;                              /* 數據增加    */
    OSEventResume(pEvent);
    Rt = OS_NO_ERR;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSQPostFront
** 功能描述: 中LIFO方式發送消息
** 輸 入: pEvent:指向隊列的指針
**         Msg:發送的消息
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
**         OS_ERR_POST_NULL_PTR:發送消息指針為空
**         OS_Q_FULL:隊列滿
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_POST_FRONT > 0
        uint8 OSQPostFront(OS_EVENT * pEvent, void *Msg)
{
    OS_Q *QPtr;
    uint8 Rt;
    
    if (pEvent == NULL)
    {
        return OS_ERR_PEVENT_NULL;
    }

    if (Msg == NULL)
    {
        return OS_ERR_POST_NULL_PTR;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        Rt = OS_ERR_EVENT_TYPE;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
        
    if (QPtr->NData >= QPtr->MaxData)           /* 隊列是否滿 */
    {
        Rt = OS_Q_FULL;
        goto Error;
    }

    QPtr->Out--;                                /* 調整出隊指針 */
    if (QPtr->Out < QPtr->Buf)
    {
        QPtr->Out = QPtr->End - 1;
    }
    QPtr->Out[0] = Msg;                         /* 數據入隊     */
    QPtr->NData++;                              /* 數據增加    */
    OSEventResume(pEvent);
    Rt = OS_NO_ERR;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSQNMsgs
** 功能描述: 取得消息隊列中消息數
** 輸 入: pEvent:事件指針
** 輸 出: 消息數
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_NMsgs > 0
        uint16 OSQNMsgs(OS_EVENT * pEvent)
{
    OS_Q *QPtr;
    uint8 Rt;
    
    if (pEvent == NULL)
    {
        return 0;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        Rt = 0;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
    Rt = QPtr->NData;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSQSize
** 功能描述: 取得消息隊列總容量
** 輸 入: pEvent:事件指針
** 輸 出: 消息總容量數
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_SIZE > 0
        uint16 OSQSize(OS_EVENT * pEvent)
{
    OS_Q *QPtr;
    uint8 Rt;
    
    if (pEvent == NULL)
    {
        return 0;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        Rt = 0;
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
    Rt = QPtr->MaxData;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSQFlush
** 功能描述: 清空隊列
** 輸 入: pEvent:事件指針
** 輸 出: 無
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_Q_FLUSH > 0
        void OSQFlush (OS_EVENT * pEvent)
{
    OS_Q *QPtr;
    
    if (pEvent == NULL)
    {
        return;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_Q)      /* 這個事件不是消息隊列   */
    {
        goto Error;
    }

    QPtr = pEvent->EventData.OSQPtr;
    QPtr->Out = QPtr->Buf;
    QPtr->In = QPtr->Buf;
    QPtr->NData = 0;                            /* 數據數目為0 */

Error:
    OS_EXIT_CRITICAL();
    return;
}
#endif

#endif
#endif
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久午夜国产精品| 狠狠色丁香婷婷综合| 欧美电影免费观看高清完整版| 99久久免费国产| 国产呦精品一区二区三区网站| 午夜精品久久久久久久99水蜜桃| 亚洲欧洲一区二区三区| 久久久蜜桃精品| 日韩美女一区二区三区| 欧美嫩在线观看| 日韩一级大片在线观看| 91黄视频在线观看| 欧美日韩国产在线观看| 91日韩在线专区| av亚洲产国偷v产偷v自拍| 成人亚洲一区二区一| 国产成人免费视| 不卡免费追剧大全电视剧网站| 色综合中文字幕国产 | 欧美日韩在线三级| 懂色av一区二区在线播放| 欧美国产欧美综合| 精品视频在线视频| 91日韩精品一区| 国产 欧美在线| 成人中文字幕在线| 97精品久久久午夜一区二区三区| 欧美午夜不卡视频| 欧美精品一区二区三区蜜臀| 国产欧美一区在线| 在线观看三级视频欧美| 日本成人在线电影网| 国产日韩精品一区二区浪潮av | 欧美日韩免费一区二区三区| 日本 国产 欧美色综合| 欧美国产一区视频在线观看| 欧美午夜理伦三级在线观看| 激情久久久久久久久久久久久久久久 | 一本到三区不卡视频| 日韩电影在线观看电影| 日本一区二区动态图| 欧美日韩亚洲综合一区 | 成人高清视频在线| 日本亚洲天堂网| 亚洲视频一区二区在线| 日韩一区二区精品葵司在线| 91丨porny丨中文| 精品在线你懂的| 亚洲激情图片小说视频| 久久夜色精品一区| 国产欧美一区二区在线| 欧美日韩日日夜夜| 不卡影院免费观看| 国产精品欧美一区喷水| 一区二区三区在线影院| 视频一区在线视频| 激情综合色播激情啊| 99精品久久只有精品| 欧美日韩三级视频| 欧美极品美女视频| 亚洲一区二区视频在线观看| 青青草97国产精品免费观看无弹窗版| 国产一区不卡在线| 欧美三区免费完整视频在线观看| 欧美一级日韩一级| 亚洲欧美中日韩| 日本欧美肥老太交大片| 成人午夜在线视频| 欧美精品色综合| 亚洲一二三四久久| 蜜臀久久99精品久久久久宅男| 91精品国产日韩91久久久久久| 午夜日韩在线观看| 韩国一区二区三区| 国产在线不卡一区| 99re热这里只有精品视频| 日韩精品一区二区在线| 一区二区三区.www| 欧美xxx久久| 91啪亚洲精品| 日韩高清在线一区| 亚洲综合免费观看高清完整版在线| 国产欧美视频一区二区| wwww国产精品欧美| 日韩一级二级三级精品视频| 欧美日韩美女一区二区| 在线亚洲一区观看| 91香蕉视频mp4| 成人av高清在线| 成人福利视频在线| 国产aⅴ综合色| 国产精品一区免费视频| 精品一区二区三区在线观看国产| 午夜精品久久久久久久久久| 亚洲精品乱码久久久久久黑人| 国产精品久久久久永久免费观看| 久久综合精品国产一区二区三区| 日韩美女视频在线| 91麻豆精品国产91久久久久久久久| 91久久精品午夜一区二区| 91网站在线播放| 欧美videos中文字幕| 欧美一区二区三区色| 欧美疯狂性受xxxxx喷水图片| 欧美系列亚洲系列| 欧美日韩黄色影视| 884aa四虎影成人精品一区| 欧美日韩亚洲丝袜制服| 欧美另类videos死尸| 欧美日本在线看| 欧美日韩mp4| 宅男在线国产精品| 日韩小视频在线观看专区| 日韩欧美一级二级| 久久综合九色综合97_久久久| 久久久精品2019中文字幕之3| 国产亚洲综合av| 国产精品久久三| 亚洲欧洲在线观看av| 亚洲精品国产无天堂网2021| 一区二区三区在线不卡| 午夜欧美2019年伦理| 日本中文在线一区| 久久66热re国产| 国产成人啪午夜精品网站男同| 成人综合在线网站| 99精品在线观看视频| 91久久精品一区二区| 在线播放日韩导航| 欧美大白屁股肥臀xxxxxx| 337p粉嫩大胆噜噜噜噜噜91av| 欧美国产日韩一二三区| 亚洲欧美另类在线| 婷婷国产在线综合| 久久精品噜噜噜成人88aⅴ| 国产美女视频91| 99精品偷自拍| 欧美日韩一区二区在线观看| 日韩午夜激情免费电影| 国产日韩在线不卡| 亚洲色欲色欲www在线观看| 亚洲va欧美va国产va天堂影院| 老司机精品视频在线| 国产成人高清视频| 91久久一区二区| 欧美一区二区精品| 欧美经典三级视频一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 日韩精品电影在线| 成人综合日日夜夜| 欧美日韩中文另类| 久久久久久久久久久久久女国产乱| 国产精品你懂的| 日日夜夜免费精品视频| 国产精品18久久久| 欧美又粗又大又爽| 欧美精品一区二区三区在线 | 亚洲欧美一区二区三区久本道91| 五月天激情综合网| 国产一区二区视频在线| 一本久道久久综合中文字幕| 日韩免费在线观看| 中文字幕在线视频一区| 日韩在线一区二区| 99综合电影在线视频| 欧美电影一区二区| 国产精品免费av| 日韩精品乱码免费| 99精品欧美一区二区蜜桃免费| 欧美一级黄色片| 亚洲免费观看高清| 国产一区二区三区| 欧美性受xxxx黑人xyx| 欧美韩国日本综合| 日本欧美加勒比视频| 色综合天天天天做夜夜夜夜做| 日韩欧美国产精品一区| 亚洲青青青在线视频| 欧美日韩卡一卡二| 中文字幕一区二区视频| 国内精品伊人久久久久av影院| 日本精品一区二区三区四区的功能| 26uuu欧美| 亚洲一区二区三区小说| 午夜天堂影视香蕉久久| 国产成人鲁色资源国产91色综 | 国产一区在线观看麻豆| 色综合久久久久综合99| 日韩精品一区二区三区中文不卡| 最新热久久免费视频| 久久成人综合网| 在线观看视频一区二区欧美日韩| 国产亚洲精品bt天堂精选| 午夜精品久久久久久不卡8050| 成人在线视频一区| 91精品免费观看| 亚洲激情中文1区| 国产精品一区二区三区乱码| 欧美狂野另类xxxxoooo| 国产精品蜜臀av|