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

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

?? os_sem.c

?? 51單片機的實時系統
?? C
字號:
/*********************************************************************************************************
**				                               Small RTOS(51)
**                                   The Real-Time Kernel(For Keil c51)
**
**                                  (c) Copyright 2002-2002, chenmingji
**                                           All Rights Reserved
**
**                                                  V1.10
********************************************************************************************************/

#define  IN_OS_SEM
#include "config.h"

#if EN_OS_SEM > 0
#if OS_MAX_TASKS < 9
uint8 OS_SEM_MEM_SEL OsSemBuf[OS_MAX_SEMS * 2];
#else
uint8 OS_SEM_MEM_SEL OsSemBuf[OS_MAX_SEMS * 3];
#endif



/*********************************************************************************************************
** 函數名稱: OSSemCreate
** 功能描述: 初始化消息隊列
** 輸 入: Index:信號量索引
**         data:信號量初始值
** 輸 出: NOT_OK:沒有這個信號量
**         OS_SEM_OK:成功
** 全局變量: 無
** 調用模塊: 無
********************************************************************************************************/

        uint8 OSSemCreate(uint8 Index,uint8 Data)
{
    OS_ENTER_CRITICAL();
    if (Index < OS_MAX_SEMS )
    {
#if OS_MAX_TASKS < 9
        OsSemBuf[2 * Index] = Data;
        OsSemBuf[2 * Index + 1] = 0;
#else
        OsSemBuf[3 * Index] = Data;
        OsSemBuf[3 * Index + 1] = 0;
        OsSemBuf[3 * Index + 2] = 0;
#endif
        OS_EXIT_CRITICAL();
        return OS_SEM_OK;
    }
    OS_EXIT_CRITICAL();
    return NOT_OK;
}

/*********************************************************************************************************
** 函數名稱: OSSemPend
** 功能描述: 等待一個信號量
** 輸 入: Index:信號量索引
**         Tick:等待時間
** 輸 出: NOT_OK:參數錯誤
**         OS_SEM_OK:得到信號量
**         OS_SEM_TMO:超時到
**         OS_SEM_NOT_OK:沒有得到信號量
** 全局變量: 無
** 調用模塊: OSRunningTaskID,OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
********************************************************************************************************/
#if EN_OS_SEM_PENT > 0

        uint8 OSSemPend(uint8 Index, uint8 Tick)
{
#if EN_OS_SEM_CHK > 0
    if (Index >= OS_MAX_SEMS)
    {
        return 0;
    }
#endif

    OS_ENTER_CRITICAL();

    OSWaitTick[OSRunningTaskID()] = Tick;

#if OS_MAX_TASKS < 9
    OsSemBuf[Index * 2 + 1] |= OSMapTbl[OSRunningTaskID()];
#else
    if (OSRunningTaskID() < 8)
    {
        OsSemBuf[Index * 3 + 1] |= OSMapTbl[OSRunningTaskID()];
    }
    else
    {
        OsSemBuf[Index * 3 + 2] |= OSMapTbl[OSRunningTaskID() & 0x07];
    }
#endif

#if OS_MAX_TASKS < 9
    while (OsSemBuf[Index * 2] == 0)
    {
#else
    while (OsSemBuf[Index * 3] == 0)
    {
#endif

#ifdef __C51__
        SP++;
        *((uint8 idata *)SP) = Index;
#endif
        OSClearSignal(OSRunningTaskID());
        OSSched();
        OS_ENTER_CRITICAL();
#ifdef __C51__
        Index = *((uint8 idata *)SP);
        SP--;
#endif
        if (OSWaitTick[OSRunningTaskID()] == 0)
        {
            break;
        }
    }

#if OS_MAX_TASKS < 9
    OsSemBuf[Index * 2 + 1] &= ~OSMapTbl[OSRunningTaskID()];
#else
    if (OSRunningTaskID() < 8)
    {
        OsSemBuf[Index * 3 + 1] &= ~OSMapTbl[OSRunningTaskID()];
    }
    else
    {
        OsSemBuf[Index * 3 + 2] &= ~OSMapTbl[OSRunningTaskID() & 0x07];
    }
#endif

#if OS_MAX_TASKS < 9
    if (OsSemBuf[Index * 2] > 0)
    {
        OsSemBuf[Index * 2]--;
#else
    if (OsSemBuf[Index * 3] > 0)
    {
        OsSemBuf[Index * 3]--;
#endif
        OS_EXIT_CRITICAL();
        return OS_SEM_OK;
    }
    else
    {
        OS_EXIT_CRITICAL();
        return OS_SEM_TMO;
    }
}
#endif

/*********************************************************************************************************
** 函數名稱: OSSemAccept
** 功能描述: 無等待請求信號量
** 輸 入: Index:信號量索引
** 輸 出: NOT_OK:參數錯誤
**         OS_SEM_OK:得到信號量
**         OS_SEM_TMO:超時到
**         OS_SEM_NOT_OK:沒有得到信號量
** 全局變量: 無
** 調用模塊: OSClearSignal,OSSched,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
********************************************************************************************************/
#if EN_OS_SEM_ACCEPT > 0
        uint8 OSSemAccept(uint8 Index)
{
#if EN_OS_SEM_CHK > 0
    if (Index >= OS_MAX_SEMS)
    {
        return 0;
    }
#endif

    OS_ENTER_CRITICAL();

#if OS_MAX_TASKS < 9
    if (OsSemBuf[Index * 2] > 0)
    {
        OsSemBuf[Index * 2]--;
#else
    if (OsSemBuf[Index * 3] > 0)
    {
        OsSemBuf[Index * 3]--;
#endif
        OS_EXIT_CRITICAL();
        return OS_SEM_OK;
    }
    else
    {
        OS_EXIT_CRITICAL();
        return OS_SEM_NOT_OK;
    }
}
#endif


/*********************************************************************************************************
** 函數名稱: OSSemIntPost
** 功能描述: 中斷中發送一個信號量
** 輸 入: Index:信號量索引
** 輸 出: NOT_OK:參數錯誤
**         OS_SEM_OK:發送成功
** 全局變量: 無
** 調用模塊: OSIntSendSignal,OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
********************************************************************************************************/
#if EN_OS_SEM_INT_POST > 0  || EN_OS_SEM_POST > 0
        uint8 OSSemIntPost(uint8 Index)
{
    uint8 temp,i;

#if EN_OS_SEM_CHK > 0
    if (Index >= OS_MAX_SEMS)
    {
        return NOT_OK;
    }
#endif

    OS_ENTER_CRITICAL();

#if OS_MAX_TASKS < 9
    if (OsSemBuf[Index * 2] <255)
    {
        OsSemBuf[Index * 2]++;
    }

    temp = OsSemBuf[Index*2+1];
    for (i = 0; i < OS_MAX_TASKS -1; i++)
    {
        if ((temp & 0x01) != 0)
        {
            break;
        }
        temp = temp >> 1;
    }
    if (i < OS_MAX_TASKS)
    {
        OsSemBuf[Index * 2 + 1] &= ~OSMapTbl[i];
        OSIntSendSignal(i);
    }
#else
    if (OsSemBuf[Index * 3] <255)
    {
        OsSemBuf[Index * 3]++;
    }

    temp = OsSemBuf[Index * 3 + 1];
    for (i = 0; i < 8; i++)
    {
        if ((temp & 0x01) != 0)
        {
            break;
        }
        temp = temp >> 1;
    }
    if (i >= 8)
    {
        temp = OsSemBuf[Index * 3 + 2];
        for ( ; i < (OS_MAX_TASKS - 1); i++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
    }
    if (i < OS_MAX_TASKS)
    {
        if (i < 8)
        {
            OsSemBuf[Index * 3 + 1] &= ~OSMapTbl[i];
        }
        else
        {
            OsSemBuf[Index * 3 + 2] &= ~OSMapTbl[i & 0x07];
        }
        OSIntSendSignal(i);
    }
#endif
    OS_EXIT_CRITICAL();
    return OS_SEM_OK;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSSemPost
** 功能描述: 發送一個信號量
** 輸 入: Index:信號量索引
** 輸 出: NOT_OK:參數錯誤
**         OS_SEM_OK:發送成功
** 全局變量: 無
** 調用模塊: OSSemIntPost,OSSched
********************************************************************************************************/
#if EN_OS_SEM_POST > 0
        uint8 OSSemPost(uint8 Index)
{
    if (OSSemIntPost(Index) == OS_SEM_OK)
    {
        OSSched();
        return OS_SEM_OK;
    }
    else
    {
        return NOT_OK;
    }
}
#endif

/*********************************************************************************************************
** 函數名稱: OSSemQuery
** 功能描述: 查詢信號量
** 輸 入: Index:信號量索引
** 輸 出: 信號量的值
** 全局變量: 無
** 調用模塊: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
********************************************************************************************************/
#if EN_OS_SEM_QUERY > 0
        uint8 OSSemQuery(uint8 Index)
{
    if (Index >= OS_MAX_SEMS)
    {
        return 0;
    }

#if OS_MAX_TASKS < 9
        return OsSemBuf[2*Index];
#else
        return OsSemBuf[3*Index];
#endif
    return temp;
}
#endif



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
√…a在线天堂一区| 青青青爽久久午夜综合久久午夜| 韩国av一区二区三区在线观看| 91精品综合久久久久久| 久久久高清一区二区三区| 国产伦精一区二区三区| 亚洲激情自拍偷拍| 国产精品美女久久久久久久久| 在线观看成人小视频| 国产二区国产一区在线观看| 一区二区三区四区在线| 国产精品美女久久久久久久久久久| 精品国产乱码久久久久久牛牛| 一区二区欧美国产| 亚洲女同一区二区| 亚洲精品五月天| 洋洋av久久久久久久一区| 国产精品色哟哟网站| 国产精品久久久久久久久动漫 | 亚洲成年人网站在线观看| 国产清纯白嫩初高生在线观看91 | 日韩视频免费观看高清完整版在线观看| 色综合久久天天| 欧美在线观看一区二区| 91首页免费视频| 国产精品欧美一区喷水| 亚洲视频资源在线| 亚洲电影视频在线| 国产精品一二二区| 九九久久精品视频| 天天操天天色综合| 欧美丰满嫩嫩电影| 色一区在线观看| 91精品国产福利| 国产欧美日韩另类视频免费观看 | 美洲天堂一区二卡三卡四卡视频 | 国产丶欧美丶日本不卡视频| 狠狠色伊人亚洲综合成人| 日韩成人精品在线观看| 国产精品二三区| 久久先锋影音av鲁色资源网| 国产精品免费视频观看| 一区二区三区四区不卡在线| 捆绑紧缚一区二区三区视频| 午夜久久久影院| 狠狠色丁香婷婷综合久久片| 日本一区二区免费在线| 97久久久精品综合88久久| 五月天久久比比资源色| 精品国产百合女同互慰| 不卡视频在线看| 午夜欧美大尺度福利影院在线看| 精品国产一区二区三区不卡 | 日韩一级完整毛片| 亚洲综合区在线| 在线不卡免费av| 日韩一级精品视频在线观看| 另类小说色综合网站| 2017欧美狠狠色| 日本欧美加勒比视频| 在线91免费看| 久久av资源站| 久久久久国产精品人| 国产激情精品久久久第一区二区| 26uuu国产在线精品一区二区| 国产三区在线成人av| 日韩国产欧美在线观看| 99久久国产综合精品麻豆| 欧美一区2区视频在线观看| 一区二区三区精密机械公司| 麻豆国产精品视频| 日韩极品在线观看| 51午夜精品国产| 一区二区三区小说| 日本精品一区二区三区高清| 亚洲大片在线观看| 欧美精品在线视频| 国产成人综合在线| 亚洲午夜久久久| 欧美性受极品xxxx喷水| 奇米精品一区二区三区四区 | 99精品视频在线观看免费| 久久爱www久久做| 中文字幕av在线一区二区三区| 欧美日韩一卡二卡| 91在线视频免费91| 色一情一乱一乱一91av| 国产成人自拍在线| 在线观看成人免费视频| 91亚洲永久精品| 极品瑜伽女神91| 日韩不卡在线观看日韩不卡视频| 亚洲免费av高清| 一区二区高清视频在线观看| 亚洲欧美国产毛片在线| 中文字幕制服丝袜成人av| 最新国产成人在线观看| 国产精品久久免费看| 久久综合九色欧美综合狠狠| 精品国产麻豆免费人成网站| 91.成人天堂一区| 国产精品视频第一区| 日韩国产成人精品| 国产精品99久| 欧美午夜在线一二页| 日韩一区二区不卡| 亚洲国产裸拍裸体视频在线观看乱了 | 国产成人av电影免费在线观看| 欧美色综合网站| 久久综合成人精品亚洲另类欧美 | 色婷婷av一区二区| 精品国产sm最大网站免费看| 亚洲天堂成人网| 国产精品影视在线观看| 欧美一区二区三区视频免费| 日韩毛片在线免费观看| 国产a久久麻豆| 欧美本精品男人aⅴ天堂| 午夜精品福利视频网站| 色吊一区二区三区| 中文字幕在线不卡视频| 国产精品一区二区在线看| 欧美日韩在线一区二区| 成人aaaa免费全部观看| 一本大道久久精品懂色aⅴ| 成人av先锋影音| 精品国产免费人成电影在线观看四季| 亚洲综合色视频| 欧美精品久久99| 日本中文字幕一区二区有限公司| 色香色香欲天天天影视综合网| 国产欧美一区二区精品婷婷| 极品少妇一区二区三区精品视频| 欧美电影一区二区| 久久精品国产99| 26uuu精品一区二区在线观看| 国产精品888| 亚洲欧美综合色| 欧美亚洲国产一区二区三区| 亚洲国产成人va在线观看天堂| 欧美综合色免费| 毛片av一区二区| 2020日本不卡一区二区视频| 成人黄色片在线观看| 一区二区成人在线| 欧美xxxx老人做受| 成人免费视频一区| 视频在线观看国产精品| 国产亚洲一二三区| 在线视频亚洲一区| 国产91精品一区二区麻豆亚洲| 一区二区三区中文字幕在线观看| 制服丝袜亚洲播放| 成人av综合一区| 美女一区二区在线观看| 国产精品嫩草影院com| 日韩精品在线一区二区| 一道本成人在线| 成人激情综合网站| 秋霞影院一区二区| 日日噜噜夜夜狠狠视频欧美人| 欧美韩国一区二区| 久久亚洲欧美国产精品乐播| 欧美高清性hdvideosex| 日本韩国精品一区二区在线观看| 日本 国产 欧美色综合| 亚洲成av人片在www色猫咪| 国产欧美日韩精品一区| 国产大陆a不卡| 日韩电影一区二区三区| 综合久久一区二区三区| 国产日韩精品一区二区三区| 欧美一区二区大片| 在线综合视频播放| 91精品福利视频| 欧美日韩在线亚洲一区蜜芽| 色综合久久中文综合久久牛| 福利视频网站一区二区三区| 国产很黄免费观看久久| 国产乱码一区二区三区| 国产一区视频网站| 成人avav影音| 色综合天天综合网天天狠天天| 在线免费视频一区二区| 欧美日韩一区二区三区四区 | 亚洲女与黑人做爰| 午夜精品久久一牛影视| 精品一区二区三区视频在线观看| 国产乱一区二区| 色婷婷久久久综合中文字幕| 337p亚洲精品色噜噜噜| 欧美激情综合五月色丁香| 亚洲福利视频一区| 国产精品一卡二卡| 欧美精品自拍偷拍| 国产精品区一区二区三| 免费成人在线影院| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美精品亚洲二区| 中文字幕一区二区三区在线播放|