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

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

?? os_event.c

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

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

#if OS_MAX_EVENTS > 0

OS_EVENT            *OSEventFreeList;               /* 自由事件登記項 */
OS_EVENT            OSEventTbl[OS_MAX_EVENTS];      /* 事件登記項     */

/*********************************************************************************************************
** 函數名稱: OSEventinit
** 功能描述: 初始化自由事件登記項
** 輸 入: 無
** 輸 出: OS_NO_ERR
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
    uint8 OSEventinit(void)
{
    uint32 i;
    
    OSEventFreeList = &(OSEventTbl[0]);
    for (i = 0; i < OS_MAX_EVENTS - 1; i++)
    {
        OSEventTbl[i].OSEventType = 0;
        OSEventTbl[i].WaitingTcb = NULL;
        OSEventTbl[i].EventData.EventNext = &(OSEventTbl[i + 1]);
        OSEventTbl[i].WaitingTcbEnd = NULL;
    }
    OSEventTbl[OS_MAX_EVENTS - 1].OSEventType = 0;
    OSEventTbl[OS_MAX_EVENTS - 1].WaitingTcb = NULL;
    OSEventTbl[OS_MAX_EVENTS - 1].EventData.EventNext = NULL;
    OSEventTbl[OS_MAX_EVENTS - 1].WaitingTcbEnd = NULL;
    return OS_NO_ERR;
}

/*********************************************************************************************************
** 函數名稱: OSEventNew
** 功能描述: 創建事件
** 輸 入: 無
** 輸 出: 事件指針
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        OS_EVENT * OSEventNew (void)
{
    OS_EVENT * Rt;
    
    if (OSEventFreeList == NULL)
    {
        return NULL;
    }
    
    Rt = OSEventFreeList;
    OSEventFreeList = OSEventFreeList->EventData.EventNext;
    return Rt;
}

/*********************************************************************************************************
** 函數名稱: OSEventResume
** 功能描述: 恢復等待此事件的任務
** 輸 入: 無
** 輸 出: OS_NO_ERR
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        uint8 OSEventResume(OS_EVENT *pEvent)
{
    OS_TCB *Tcb;

    Tcb = pEvent->WaitingTcb;                   /* 恢復處于等待鏈表的頭的任務   */
    if (Tcb != NULL)
    {
        /* 從鏈表中刪除它               */
        pEvent->WaitingTcb = Tcb->EventNext;
        if (Tcb->EventNext != NULL)
        {
            Tcb->EventNext->EventPrev = NULL;
        }
        Tcb->EventNext = NULL;
        /* 恢復任務                     */
        OS_TimeTickDel(Tcb);                    /* 從等待延時隊列中刪除 */
        _OS_TaskResume(Tcb);
        Tcb->OSTCBStat &= ~OS_STAT_EVENT;
        OSSched();                              /* 任務切換                     */
    }
    return OS_NO_ERR;
}

/*********************************************************************************************************
** 函數名稱: OSEventFree
** 功能描述: 釋放事件
** 輸 入: pEvent:事件指針
** 輸 出: OS_NO_ERR
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        uint8 OSEventFree (OS_EVENT *pEvent)
{
    uint8 Rt,OldPrio,NowPrio;
    OS_TCB *Tcb;

    /* 恢復初始值           */
    OldPrio = OSTCBCur->OSTCBPrio;
    NowPrio = OldPrio;
    pEvent->OSEventType = 0;
    /* 恢復所有等待的任務   */
    while (pEvent->WaitingTcb != NULL)
    {
        Tcb = pEvent->WaitingTcb;
        OSEventResume(pEvent);
        if (NowPrio < Tcb->OSTCBPrio)
        {
            NowPrio = Tcb->OSTCBPrio;
            /* 改變當前任務優先級確保被恢復的任務進入執行狀態 */
            OSTaskChangePrio(OSTCBCur->OSTCBId, NowPrio);
        }
    }
    /* 恢復當前任務優先級   */
    OSTaskChangePrio(OSTCBCur->OSTCBId, OldPrio);
    /* 恢復初始值           */
    pEvent->WaitingTcbEnd = NULL;
    pEvent->EventData.EventNext = OSEventFreeList;
    OSEventFreeList = pEvent;               /* 加入空閑隊列         */
    Rt = OS_NO_ERR;
    return Rt;
}


/*********************************************************************************************************
** 函數名稱: OSEventWait
** 功能描述: 讓當前任務等待事件
** 輸 入: pEvent:事件指針
**         Tick:超時設置
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEND_ISR:在中斷中等待事件
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        uint8 OSEventWait (OS_EVENT *pEvent, uint8 Tick)
{
#if OS_EVENT_MODE == BASE_PRIO
    OS_TCB *pTcb;
    uint8 Prio;
#endif

    if (OSIntNesting != 0)
    {
        return OS_ERR_PEND_ISR;
    }

#if OS_EVENT_MODE == BASE_FIFO
    /* 基于FIFO */
    if (pEvent->WaitingTcb == NULL)
    {
        /* 如果無任務等待 */
        pEvent->WaitingTcb = OSTCBCur;
        OSTCBCur->EventPrev = NULL;
    }
    else
    {
        /*如果有任務等待 */
        OSTCBCur->EventPrev = pEvent->WaitingTcbEnd;
        pEvent->WaitingTcbEnd->EventNext = OSTCBCur;
    }
    OSTCBCur->EventNext = NULL;
#endif

#if OS_EVENT_MODE == BASE_PRIO
    /* 基于優先級 */
    Prio = OSTCBCur->OSTCBPrio;
    if ((pEvent->WaitingTcb) == NULL ||
        (pEvent->WaitingTcb->OSTCBPrio) > Prio)
    {
        /* 如果無任務等待或本任務比所有等待的任務的優先級都高 */
        pEvent->WaitingTcb = OSTCBCur;
        OSTCBCur->EventPrev = NULL;
        OSTCBCur->EventNext = pEvent->WaitingTcb;
    }
    else
    {
        pTcb = pEvent->WaitingTcbEnd;           /* 從鏈表最后往前查找 */
        if (pTcb->OSTCBPrio <= Prio)
        {
            /* 本任務比所有等待的任務的優先級都低 */
            OSTCBCur->TcbPrev = pEvent->WaitingTcbEnd;
            pEvent->WaitingTcbEnd->EventNext = OSTCBCur;
        }
        else
        {
            /* 查找合適位置 */
            while (1)
            {
                if (pTcb->OSTCBPrio <= Prio)
                {
                    break;
                }
                pTcb = pTcb->EventPrev;
            }
            /* 插入鏈表 */
            OSTCBCur->EventPrev = pTcb;
            OSTCBCur->EventNext = pTcb->EventNext;
            pTcb->EventNext = OSTCBCur;
            OSTCBCur->EventNext->EventPrev = OSTCBCur;
        }
    }
#endif
    OSTCBCur->OSTCBStat |= OS_STAT_EVENT;
    pEvent->WaitingTcbEnd = OSTCBCur;
    if (Tick > 0)
    {
        OS_TimeDly(Tick);                       /* 超時設置             */
    }
    else
    {
        _OS_TaskSuspend(OSTCBCur);              /* 從優先級鏈表中刪除   */
    }
    OSSched();                                  /* 任務切換             */
    return OS_NO_ERR;
}
#endif

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区在线| 国产精品亲子乱子伦xxxx裸| 在线免费不卡电影| 99国产欧美另类久久久精品| 国产大片一区二区| 国产精品1024| 国产999精品久久久久久绿帽| 久久 天天综合| 国产综合色在线| 国产精品一二三四| 风流少妇一区二区| thepron国产精品| 91色乱码一区二区三区| 97久久精品人人做人人爽50路 | 欧美色网一区二区| 欧美午夜在线观看| 欧美精品久久久久久久久老牛影院| 欧美日韩三级视频| 日韩一区二区三区精品视频| 欧美sm美女调教| 国产亚洲综合av| 亚洲日本va午夜在线影院| 亚洲综合色区另类av| 五月天激情综合网| 国内国产精品久久| 99天天综合性| 欧美日韩国产乱码电影| 精品国产91乱码一区二区三区 | 欧美老女人在线| 日韩美一区二区三区| 久久久久久久久久电影| 中文字幕中文字幕在线一区| 亚洲免费av在线| 亚洲线精品一区二区三区八戒| 亚洲一区在线播放| 久久免费国产精品| 亚洲精品视频自拍| 香蕉加勒比综合久久| 日本网站在线观看一区二区三区| 麻豆成人在线观看| 成人在线视频一区| 99久久精品一区| 欧美日韩高清一区二区不卡 | 一区二区三区不卡视频在线观看 | 亚洲美女区一区| 亚洲自拍偷拍九九九| 日本一不卡视频| 国产精品主播直播| 91麻豆福利精品推荐| 欧美午夜精品久久久久久超碰| 欧美日韩电影一区| 国产精品全国免费观看高清 | 欧美刺激脚交jootjob| 久久久精品日韩欧美| 一区视频在线播放| 亚洲第一主播视频| 韩国成人福利片在线播放| 夫妻av一区二区| 欧美日韩精品免费观看视频| www激情久久| 亚洲另类在线视频| 日韩av在线免费观看不卡| 国产精品夜夜嗨| 日本道色综合久久| 67194成人在线观看| 中文字幕在线不卡| 亚洲韩国精品一区| 国产乱码一区二区三区| 欧美性大战xxxxx久久久| 欧美日本一区二区三区| 久久久亚洲精品石原莉奈| 综合色中文字幕| 精品伊人久久久久7777人| 91在线观看高清| 欧美mv和日韩mv国产网站| 综合精品久久久| 久久99精品国产91久久来源| 欧美视频在线播放| 国产精品私人影院| 国产精一区二区三区| 欧美精品一卡二卡| 亚洲欧洲性图库| 另类小说视频一区二区| 91久久精品网| 久久免费午夜影院| 韩国女主播成人在线| 欧美美女黄视频| 亚洲女人****多毛耸耸8| 美女www一区二区| 欧美三级电影一区| 亚洲色图色小说| 国产精品66部| 日韩一区二区三区精品视频| 亚洲欧美日韩一区| 豆国产96在线|亚洲| 日韩欧美久久一区| 亚洲国产精品久久人人爱蜜臀| 国产综合色在线视频区| 制服.丝袜.亚洲.另类.中文| 亚洲天堂精品在线观看| 国产91清纯白嫩初高中在线观看| 国产成人aaa| 欧美日韩成人在线| 国产日韩欧美电影| 亚洲成人自拍网| 欧美亚洲自拍偷拍| 亚洲黄色免费网站| 国产成人综合视频| 日本一区二区三区四区在线视频| 精品一区二区av| 久久午夜免费电影| 韩国v欧美v日本v亚洲v| 在线观看91精品国产麻豆| 青娱乐精品在线视频| 欧美日韩精品一区视频| 亚洲大型综合色站| 精品污污网站免费看| 亚洲图片欧美一区| 欧美日韩亚洲另类| 亚洲chinese男男1069| 欧美亚洲一区二区三区四区| 一区二区在线免费| 色综合久久88色综合天天6| 亚洲视频一区在线| 成人综合婷婷国产精品久久| 国产精品视频一二三区| 高清不卡在线观看| 国产精品福利一区二区三区| k8久久久一区二区三区 | 99视频一区二区三区| 欧美国产禁国产网站cc| 国产大陆a不卡| 亚洲欧洲美洲综合色网| av在线不卡电影| 亚洲一区在线观看视频| 日韩写真欧美这视频| 国精产品一区一区三区mba桃花 | 成人黄色av电影| 亚洲欧洲国产日韩| 色噜噜夜夜夜综合网| 一区二区免费看| 91精品久久久久久蜜臀| 美女在线一区二区| 国产婷婷一区二区| 色婷婷综合久久久中文一区二区| 亚洲一区二区在线视频| 51精品视频一区二区三区| 麻豆精品在线观看| 精品国产精品网麻豆系列| 亚洲国产人成综合网站| 欧美成人三级电影在线| 成人综合在线观看| 亚洲一区在线观看免费| 欧美大黄免费观看| 丁香啪啪综合成人亚洲小说 | 欧美va亚洲va在线观看蝴蝶网| 国产精品自拍三区| **欧美大码日韩| 在线播放欧美女士性生活| 五月婷婷综合网| 国产日韩成人精品| 欧美视频一区二区三区在线观看| 亚洲精品自拍动漫在线| 日韩欧美在线123| av在线不卡网| 麻豆91在线播放免费| 中文字幕一区二区三区四区| 91精品欧美福利在线观看| 国产白丝网站精品污在线入口 | 韩国av一区二区三区四区| 国产精品卡一卡二卡三| 欧美日韩高清一区| 成人小视频免费在线观看| 亚洲成av人片一区二区梦乃| 欧美电视剧免费观看| 欧美日韩精品欧美日韩精品一| 国产精品一区二区在线观看不卡 | 一区二区三区不卡视频在线观看| 欧美一区二区三区视频免费播放 | 国产精品美女一区二区在线观看| 日本高清成人免费播放| 精品一区免费av| 亚洲成人免费视频| 国产精品女人毛片| 日韩女优av电影| 欧美日韩免费在线视频| www.爱久久.com| 成人午夜精品在线| 免费在线观看日韩欧美| 亚洲成人7777| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩亚洲另类| 欧美视频你懂的| 91亚洲精品一区二区乱码| 国产一区二区三区在线观看精品 | 亚洲男人天堂一区| 国产午夜精品福利| 欧美精品日韩综合在线| 一本色道综合亚洲| 99国产精品99久久久久久|