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

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

?? os_sem.c

?? Small RTOS 移植到AVR下用IAR編譯的
?? C
字號:
/*********************************************************************************************************
**                                        Small RTOS
**                                   The Real-Time Kernel
**                           (c) Copyright 2002-2003, chenmingji
**                                     All Rights Reserved
**                                         V1.50.0
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: OS_sem.C
**創   建   人: 陳明計
**最后修改日期: 2004年9月5日
**描        述: Small RTOS信號量處理代碼
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 陳明計
** 版  本: V1.00
** 日 期: 2004年9月5日
** 描 述: 基本完成全新的Small RTOS核
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#define  IN_OS_SEM
#define  IN_OS
#include "includes.h"

#if OS_MAX_EVENTS > 0
#if EN_OS_SEM > 0

/*********************************************************************************************************
** 函數名稱: OSSemCreate
** 功能描述: 初始信號量
** 輸 入: data:信號量初始值
** 輸 出: 事件指針
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/

OS_EVENT * OSSemCreate(uint16 Data)
{
    OS_EVENT * Rt;
	OS_CPU_SR cpu_sr = 0;
	
    OS_ENTER_CRITICAL();
    Rt = OSEventNew();
    if (Rt != NULL)
    {
        Rt->OSEventType = OS_EVENT_SEM;
        Rt->EventData.Cnt = Data;
    }
    OS_EXIT_CRITICAL();
    return Rt;
}

/*********************************************************************************************************
** 函數名稱: OSSemPend
** 功能描述: 等待一個信號量/請求信號量
** 輸 入: pEvent:事件指針
**         Tick:等待時間
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
**         OS_ERR_PEND_ISR:在IRS中等待事件
**         OS_EVENT_DEL:事件被刪除
**         OS_TIMEOUT:超時
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_SEM_PENT > 0

uint8 OSSemPend(OS_EVENT * pEvent, uint16 Tick)
{
    uint8 Rt;
	OS_CPU_SR cpu_sr = 0;
	
    if (pEvent == NULL)
    {
        return OS_ERR_PEVENT_NULL;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_SEM)    /* 這個事件不是信號量   */
    {
        Rt = OS_ERR_EVENT_TYPE;
        goto Error;
    }
    if (pEvent->EventData.Cnt == 0)             /* 無信號量             */
    {
        Rt = OSEventWait(pEvent, Tick);
        if (Rt != OS_NO_ERR)
        {
            goto Error;
        }
    }
    if (pEvent->OSEventType != OS_EVENT_SEM)    /* 這個事件不是信號量   */
    {
        Rt = OS_EVENT_DEL;                      /* 事件被刪除           */
        goto Error;
    }
    if(pEvent->EventData.Cnt == 0)              /* 無信號量             */
    {
        Rt = OS_TIMEOUT;
        goto Error;
    }

    pEvent->EventData.Cnt--;
    Rt = OS_NO_ERR;

Error:
    OS_EXIT_CRITICAL();
    return Rt;
}

#endif

/*********************************************************************************************************
** 函數名稱: OSSemAccept
** 功能描述: 無等待請求信號量
** 輸 入: pEvent:事件指針
** 輸 出: 信號量的值
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_SEM_ACCEPT > 0

uint16 OSSemAccept(OS_EVENT * pEvent)
{
    uint8 Rt;
	OS_CPU_SR cpu_sr = 0;
	
    Rt = 0;
    if (pEvent != NULL)
    {
        OS_ENTER_CRITICAL();
        if (pEvent->OSEventType == OS_EVENT_SEM)
        {
            if (pEvent->EventData.Cnt != 0)
            {
                Rt = pEvent->EventData.Cnt;
                pEvent->EventData.Cnt--;
            }
        }
        OS_EXIT_CRITICAL();
    }
    return Rt;
}

#endif


/*********************************************************************************************************
** 函數名稱: OSSemPost
** 功能描述: 發送一個信號量
** 輸 入: pEvent:事件指針
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
**         OS_SEM_OVF:信號量滿
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_SEM_POST > 0

uint8 OSSemPost(OS_EVENT * pEvent)
{
    uint8 Rt;
	OS_CPU_SR cpu_sr = 0;
	
    if (pEvent == NULL)
    {
        return OS_ERR_PEVENT_NULL;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_SEM)
    {
        Rt = OS_ERR_EVENT_TYPE;
    }
    else
    {
        if (pEvent->EventData.Cnt == (uint16)(-1))  /* 到達最大值 */
        {
            Rt = OS_SEM_OVF;                        /* 信號量滿   */
        }
        else
        {
            pEvent->EventData.Cnt++;
            OSEventResume(pEvent);
            Rt = OS_NO_ERR;
        }
    }
    OS_EXIT_CRITICAL();
    return Rt;
}

#endif

/*********************************************************************************************************
** 函數名稱: OSSemQuery
** 功能描述: 查詢信號量
** 輸 入: pEvent:事件指針
**         Cnt:用于輸出信號量的值
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_SEM_QUERY > 0

uint8 OSSemQuery(OS_EVENT * pEvent, uint16 *Cnt)
{
    uint8 Rt;
    OS_CPU_SR cpu_sr = 0;
	
    if (pEvent == NULL)
    {
        return OS_ERR_PEVENT_NULL;
    }

    OS_ENTER_CRITICAL();
    if (pEvent->OSEventType != OS_EVENT_SEM)
    {
        Rt = OS_ERR_EVENT_TYPE;
    }
    else
    {
        *Cnt = pEvent->EventData.Cnt;
        Rt = OS_NO_ERR;
    }
    OS_EXIT_CRITICAL();
    return Rt;
}

#endif

/*********************************************************************************************************
** 函數名稱: OSSemDel
** 功能描述: 刪除信號量
** 輸 入: pEvent:事件指針
** 輸 出: OS_NO_ERR:成功
**         OS_ERR_PEVENT_NULL:事件指針為空
**         OS_ERR_EVENT_TYPE:錯誤事件類型
** 作 者: 陳明計
** 日 期: 2004年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_SEM_DEL > 0

uint8 OSSemDel(OS_EVENT * pEvent)
{
    uint8 Rt;
    OS_CPU_SR cpu_sr = 0;
	
    if (pEvent == NULL)
    {
        Rt = OS_ERR_PEVENT_NULL;
    }
    else
    {
        OS_ENTER_CRITICAL();
        if (pEvent->OSEventType != OS_EVENT_SEM)
        {
            Rt = OS_ERR_EVENT_TYPE;
        }
        else
        {
            Rt = OSEventFree(pEvent);
        }
        OS_EXIT_CRITICAL();
    }
    return Rt;
}

#endif

#endif

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久69国产一区二区蜜臀| 色哟哟精品一区| 理论片日本一区| 午夜精品久久久久久| 亚洲一区在线视频| 一区二区在线观看av| 亚洲乱码国产乱码精品精的特点| 国产精品无码永久免费888| 国产人久久人人人人爽| 国产三级欧美三级日产三级99| 久久综合网色—综合色88| 亚洲精品一区二区三区在线观看| 日韩视频一区二区三区| 日韩免费视频一区| 欧美成人猛片aaaaaaa| 欧美日韩第一区日日骚| 91精品国产综合久久福利| 亚洲视频小说图片| 一区二区三区欧美视频| 亚洲国产wwwccc36天堂| 日韩中文字幕av电影| 免费亚洲电影在线| 精品亚洲成a人| 国产成人在线视频网站| 99精品欧美一区二区三区综合在线| 91在线国产福利| 欧美伊人精品成人久久综合97| 欧美美女bb生活片| 日韩精品中午字幕| 国产欧美日韩久久| 亚洲欧美日韩一区| 日韩av一级电影| 国产盗摄精品一区二区三区在线| 成人av电影观看| 在线观看视频一区二区欧美日韩| 91精品国产综合久久福利 | 久久婷婷色综合| 国产亚洲精品精华液| 亚洲少妇最新在线视频| 亚洲va欧美va国产va天堂影院| 久久成人久久鬼色| 国产不卡在线播放| 91美女在线视频| 7777精品伊人久久久大香线蕉经典版下载 | 成人av影院在线| 91行情网站电视在线观看高清版| 欧美精选午夜久久久乱码6080| 久久美女高清视频| 尤物av一区二区| 韩国在线一区二区| 色视频成人在线观看免| 日韩欧美高清在线| 亚洲色图在线看| 久久99热这里只有精品| 91在线你懂得| 精品国产91久久久久久久妲己| 亚洲欧美日韩电影| 免费国产亚洲视频| 91免费在线视频观看| 日韩美女在线视频| 亚洲三级在线看| 欧美视频一区二| 久久精品视频免费观看| 午夜精品影院在线观看| gogogo免费视频观看亚洲一| 欧美肥大bbwbbw高潮| 亚洲欧美在线高清| 国内精品免费**视频| 欧美日韩另类一区| 国产精品伦一区二区三级视频| 蜜桃视频免费观看一区| 日本精品一区二区三区高清 | 亚洲午夜一区二区三区| 国产99久久久精品| 日韩一区二区三区在线观看| 中文字幕视频一区| 国产精品影视在线| 日韩免费一区二区| 亚洲成人免费看| 99久久精品国产麻豆演员表| 久久午夜羞羞影院免费观看| 日韩电影一区二区三区| 91久久一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 最新国产精品久久精品| 麻豆精品久久久| 91精品国产综合久久久久久久| 亚洲激情欧美激情| 波多野结衣视频一区| 国产亚洲成aⅴ人片在线观看| 久久超碰97人人做人人爱| 欧美一区二区三区四区久久| 亚洲国产精品精华液网站| 91成人在线精品| 亚洲图片另类小说| 99国内精品久久| 中文无字幕一区二区三区| 国精品**一区二区三区在线蜜桃| 日韩一区二区三区观看| 手机精品视频在线观看| 欧美日韩精品一区二区三区蜜桃| 亚洲午夜久久久久久久久电影网 | 不卡的av在线| 国产精品五月天| caoporn国产精品| 国产精品少妇自拍| 成人影视亚洲图片在线| 国产欧美日韩精品在线| 成人免费电影视频| 国产精品久久久久影视| eeuss影院一区二区三区| 日韩美女久久久| 色综合av在线| 性做久久久久久久久| 91精品免费在线观看| 美女爽到高潮91| 26uuu久久天堂性欧美| 国产精品18久久久久久久网站| 久久精子c满五个校花| 岛国一区二区三区| 亚洲欧洲精品一区二区三区| 91片在线免费观看| 亚洲第一激情av| 欧美一区二区福利视频| 九九久久精品视频| 欧美国产日本视频| 在线欧美小视频| 日日夜夜免费精品视频| 精品久久久久久久久久久院品网 | 久久久久国产精品免费免费搜索| 粉嫩欧美一区二区三区高清影视| 国产精品久久一卡二卡| 色哟哟欧美精品| 日韩av在线播放中文字幕| 久久亚洲影视婷婷| 99精品久久只有精品| 亚洲国产精品久久久久婷婷884 | 日韩欧美三级在线| 国产精一区二区三区| 亚洲欧美中日韩| 欧美蜜桃一区二区三区| 黑人精品欧美一区二区蜜桃| ●精品国产综合乱码久久久久 | 丝袜美腿亚洲色图| 欧美va在线播放| av一二三不卡影片| 日产欧产美韩系列久久99| 国产三级欧美三级日产三级99 | 久久久高清一区二区三区| 91理论电影在线观看| 蜜桃视频一区二区三区| 亚洲三级免费电影| 日韩欧美成人激情| 91玉足脚交白嫩脚丫在线播放| 日本怡春院一区二区| 国产精品久久福利| 日韩一区二区麻豆国产| 99久久久久久99| 精品一二三四在线| 亚洲电影视频在线| 国产精品视频在线看| 91麻豆精品国产自产在线| 不卡影院免费观看| 九九热在线视频观看这里只有精品| 亚洲人午夜精品天堂一二香蕉| 日韩欧美一区二区三区在线| av不卡在线播放| 日韩av中文字幕一区二区三区| 亚洲欧美日韩一区二区 | 欧美撒尿777hd撒尿| 国产精品99久久久久久有的能看| 亚洲另类春色校园小说| 精品久久久久久久久久久久久久久久久 | 欧美一区二区精品在线| 99久久国产免费看| 久久精品免费观看| 一区二区在线观看免费| 久久久精品人体av艺术| 欧美一区二区三区成人| 91丨porny丨国产| 经典三级在线一区| 国产精品区一区二区三区| 久久婷婷国产综合精品青草| 欧美亚洲综合在线| 豆国产96在线|亚洲| 国内成+人亚洲+欧美+综合在线| 亚洲一区二区三区中文字幕 | 欧美激情综合五月色丁香小说| 欧美三级电影在线观看| 不卡视频在线看| 日本不卡视频一二三区| 一区二区三区成人| 国产欧美日韩另类一区| 日韩欧美一级二级三级久久久| 欧美丰满一区二区免费视频| 91亚洲国产成人精品一区二区三| 激情深爱一区二区| 一区二区三区高清不卡| 一区二区三区美女视频| 国产精品久久久久久久久搜平片 |