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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_core.c

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

#define  IN_OS_CORE
#include "config.h"

#if EN_OS_INT_ENTER > 0
uint8 OSIntNesting;
#endif

uint8 OSTaskID = 0;
uint8 OSNextTaskID = 0;

uint8 OSWaitTick[OS_MAX_TASKS - 1];
#if OS_MAX_TASKS < 9
uint8 OSTaskRuning = 0xff;
#else
uint16 OSTaskRuning = 0xffff;
#endif

uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
uint8 Os_Enter_Sum = 0;


void  OSSched(void);

/*********************************************************************************************************
** 函數(shù)名稱: OSIntSendSignal
** 功能描述: 中斷中給指定任務(wù)發(fā)送信號,既使指定任務(wù)就緒
** 輸 入: TaskId : 任務(wù)ID
** 輸 出: 無
** 全局變量: OSTaskRuning-
********************************************************************************************************/
        void OSIntSendSignal(uint8 TaskId)

{
    OS_ENTER_CRITICAL();
#if OS_MAX_TASKS < 9
    OSTaskRuning |= OSMapTbl[TaskId];
#else
    if (TaskId < 8)
    {
        ((uint8 *)(&OSTaskRuning))[LOW_BYTE] |= OSMapTbl[TaskId];
    }
    else
    {
        ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] |= OSMapTbl[TaskId & 0x07];
    }
#endif
    OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** 函數(shù)名稱: OSSendSignal
** 功能描述: 任務(wù)中給指定任務(wù)發(fā)送信號,既使指定任務(wù)就緒
** 輸 入: TaskId : 任務(wù)ID
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: OSSched,OSIntSendSignal
**
** 作 者: 陳明計
** 日 期: 2002年6月20日
**-------------------------------------------------------------------------------------------------------
** 修 改: 陳明計
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void OSSendSignal(uint8 TaskId)

{
    OSIntSendSignal(TaskId);
    OSSched();                                              //開始任務(wù)切換
}

/*********************************************************************************************************
** 函數(shù)名稱: OSClearSignal
** 功能描述: 清除指定任務(wù)信號,既使指定任務(wù)休眠
** 輸 入: TaskId : 任務(wù)ID
** 輸 出: 無
** 全局變量: OSTaskRuning
** 調(diào)用模塊: 無
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void OSClearSignal(uint8 TaskId)

{
    OS_ENTER_CRITICAL();
#if OS_MAX_TASKS < 9
    OSTaskRuning &= ~OSMapTbl[TaskId];
#else
    if (TaskId < 8)
    {
        ((uint8 *)(&OSTaskRuning))[LOW_BYTE] &= ~OSMapTbl[TaskId];
    }
    else
    {
        ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] &= ~OSMapTbl[TaskId & 0x07];
    }
#endif
    OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** 函數(shù)名稱: OSIntExit
** 功能描述: 中斷退出處理函數(shù),在此進(jìn)行中斷后的任務(wù)切換
** 輸 入: 無
** 輸 出: 無
** 全局變量: OSIntNesting,OSNextTaskID
** 調(diào)用模塊: OSIntCtxSw
********************************************************************************************************/
        void OSIntExit(void)

{
    uint8 temp;

    OS_ENTER_CRITICAL();

#if EN_OS_INT_ENTER > 0
    if (OSIntNesting > 0)
    {
        OSIntNesting--;
    }
    if (OSIntNesting == 0)
    {
#endif

        Os_Enter_Sum = 0;
#if OS_MAX_TASKS < 9
        temp = OSTaskRuning;
        for (OSNextTaskID = 0; OSNextTaskID < (OS_MAX_TASKS - 1); OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
        OSIntCtxSw();
#else
        temp = OSTaskRuning % 256;
        for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                goto TaskSw;
            }
            temp = temp >> 1;
        }

        temp = OSTaskRuning /256 ;
        for (; OSNextTaskID < (OS_MAX_TASKS - 1); OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
TaskSw:
        OSIntCtxSw();
#endif

#if EN_OS_INT_ENTER >0
    }
    Os_Enter_Sum = 1;
#endif
}

/*********************************************************************************************************
** 函數(shù)名稱: OSSched
** 功能描述: 非中斷的任務(wù)切換函數(shù)
** 輸 入: 無
** 輸 出: 無
** 全局變量: OSIntNesting,OSNextTaskID
** 調(diào)用模塊: OS_TASK_SW
********************************************************************************************************/
        void  OSSched(void)

{
    uint8 temp;


    OS_ENTER_CRITICAL();
#if EN_OS_INT_ENTER > 0
    if (OSIntNesting == 0)
    {
#endif

        Os_Enter_Sum = 0;

#if OS_MAX_TASKS < 9
        temp = OSTaskRuning;
        for (OSNextTaskID = 0; OSNextTaskID < (OS_MAX_TASKS - 1); OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
        OS_TASK_SW();
#else
        temp = OSTaskRuning % 256;
        for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                goto TaskSw;
            }
            temp = temp >> 1;
        }

        temp = OSTaskRuning / 256 ;
        for (; OSNextTaskID < (OS_MAX_TASKS - 1); OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
TaskSw:
        OS_TASK_SW();
#endif

#if EN_OS_INT_ENTER > 0
    }
    else
    {
        Os_Enter_Sum = 0;
        OS_EXIT_CRITICAL();
    }
#endif
}

/*********************************************************************************************************
** 函數(shù)名稱: OSTimeTick
** 功能描述: 系統(tǒng)時鐘處理函數(shù),處理各個任務(wù)的延時
** 輸 入: 無
** 輸 出: 無
** 全局變量: OSWaitTick
** 調(diào)用模塊: OSIntSendSignal
********************************************************************************************************/
        void  OSTimeTick(void)
{
    uint8 i;

    for (i = 0; i < (OS_MAX_TASKS - 1); i++)                 
    {
        if (OSWaitTick[i] != 0 )
        {
            OSWaitTick[i]--;
            if (OSWaitTick[i] == 0)
            {
                OSIntSendSignal(i);
            }
        }
    }
}

/*********************************************************************************************************
** 函數(shù)名稱: OSWait
** 功能描述: 系統(tǒng)等待函數(shù),任務(wù)調(diào)用此函數(shù)可以等待一定時間或信號
** 輸 入: typ: 等待事件類型,目前可以取以下值,或是其中任意個值的按位或
**             K_SIG: 等待信號
**             K_TMO: 等待超時
**        ticks : 等待超時時的系統(tǒng)嘀嗒數(shù)
** 輸 出 : NOT_OK : 參數(shù)錯誤
**         TMO_EVENT : 超時到
**         SIG_EVENT : 有信號
** 全局變量: OSWaitTick
** 調(diào)用模塊: OSClearSignal
**
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        uint8 OSWait(uint8 typ, uint8 ticks)

{
    OSWaitTick[OSTaskID] = ticks;
    switch(typ)
    {
    case K_SIG:
        OSWaitTick[OSTaskID] = 0;
        OSClearSignal(OSTaskID);
        OSSched();
        return SIG_EVENT;
    case K_TMO:
        OS_ENTER_CRITICAL();
        while (OSWaitTick[OSTaskID] != 0)
        {
            OSClearSignal(OSTaskID);
            OSSched();
            OS_ENTER_CRITICAL();
        }
        OS_EXIT_CRITICAL();
        return TMO_EVENT;
    case (K_TMO | K_SIG):
        if (OSWaitTick[OSTaskID] == 0)
        {
            return TMO_EVENT;
        }
        OSClearSignal(OSTaskID);
        OSSched();
        if (OSWaitTick[OSTaskID] != 0)
        {
            OSWaitTick[OSTaskID] = 0;
            return SIG_EVENT;
        }
        return TMO_EVENT;
    default:
        OSWaitTick[OSTaskID] = 0;
        return NOT_OK;
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91污片在线观看| 91精品国产色综合久久| 日韩激情一二三区| 国产偷v国产偷v亚洲高清| 欧美三级一区二区| 国产成人免费高清| 免费视频一区二区| 一区二区三区加勒比av| 国产日韩欧美制服另类| 欧美一级二级在线观看| 色哟哟国产精品免费观看| 国产在线精品视频| 日韩国产一二三区| 一区二区久久久| 亚洲欧洲精品成人久久奇米网| 日韩欧美自拍偷拍| 欧美日韩国产在线播放网站| 99国产精品久久久| 国产成a人无v码亚洲福利| 青青草精品视频| 性感美女极品91精品| 日韩毛片视频在线看| 欧美精品一区二区三区视频| 欧美日韩国产色站一区二区三区| 91小视频免费观看| 成人h版在线观看| 国产一区二区三区在线看麻豆| 日日噜噜夜夜狠狠视频欧美人| 亚洲自拍欧美精品| 亚洲日本一区二区| 中文字幕第一区| 国产视频视频一区| 久久影视一区二区| 精品欧美一区二区久久| 在线播放视频一区| 欧美日韩国产美| 精品婷婷伊人一区三区三| 色婷婷久久久久swag精品 | 国产精品美女www爽爽爽| 亚洲精品一区二区三区精华液 | 在线精品视频免费播放| 99久久er热在这里只有精品15 | 亚洲精品视频在线观看网站| 亚洲天堂网中文字| 亚洲欧美日韩久久| 亚洲在线视频网站| 午夜伦欧美伦电影理论片| 亚洲aaa精品| 麻豆国产精品官网| 国产专区综合网| 国产激情一区二区三区四区 | 2022国产精品视频| 久久这里只有精品视频网| 国产亚洲一区字幕| 国产精品久久久久影院亚瑟 | 欧美成人a视频| 精品国产91亚洲一区二区三区婷婷| 欧美成人a∨高清免费观看| 久久久久久久久岛国免费| 日本一区二区电影| 亚洲精品成人悠悠色影视| 成人黄色国产精品网站大全在线免费观看| 成人手机电影网| 午夜视频一区在线观看| 日日夜夜精品视频免费| 免费成人av在线| 国产精品2024| 91免费版在线看| 欧美一区二区免费| 欧美天堂一区二区三区| 久久久精品国产免费观看同学| 亚洲第一福利一区| 91在线看国产| 国产欧美日韩综合精品一区二区| 丝袜亚洲精品中文字幕一区| 色综合久久中文字幕综合网| 亚洲精品在线电影| 日韩av午夜在线观看| 欧美亚一区二区| 亚洲欧美乱综合| eeuss鲁片一区二区三区在线看| 91麻豆精品国产91久久久久久| 亚洲激情图片qvod| 成人精品国产一区二区4080| 精品欧美久久久| 日本亚洲视频在线| 欧美另类高清zo欧美| 夜夜揉揉日日人人青青一国产精品| 国产.欧美.日韩| 久久免费看少妇高潮| 九九视频精品免费| 欧美福利视频导航| 亚洲妇熟xx妇色黄| 欧美日韩中文字幕一区二区| 曰韩精品一区二区| 91麻豆国产自产在线观看| 欧美激情艳妇裸体舞| 国产美女一区二区| 精品国产免费久久| 激情久久久久久久久久久久久久久久| 欧美卡1卡2卡| 五月婷婷色综合| 欧美精三区欧美精三区| 亚洲国产欧美日韩另类综合| 在线看不卡av| 一区二区不卡在线播放 | 欧美探花视频资源| 夜夜嗨av一区二区三区网页| 一本色道久久综合亚洲91| 亚洲日本电影在线| 色琪琪一区二区三区亚洲区| 亚洲激情五月婷婷| 欧美在线free| 日韩成人一级大片| 精品国产区一区| 国产成人av影院| 国产精品欧美综合在线| 99久久精品国产一区| 伊人婷婷欧美激情| 欧美日韩在线播放一区| 蜜臀久久99精品久久久久久9| 日韩欧美国产电影| 国产乱码精品一区二区三区五月婷| 国产亚洲精品中文字幕| 不卡av电影在线播放| 亚洲人成网站在线| 欧美午夜精品电影| 麻豆国产欧美日韩综合精品二区 | 亚洲成a人片在线不卡一二三区| 欧美色图第一页| 免费亚洲电影在线| 国产女主播视频一区二区| 99re这里只有精品视频首页| 亚洲国产日韩精品| 精品久久久久99| 成人精品国产免费网站| 亚洲大型综合色站| 精品国产露脸精彩对白| 不卡一区二区中文字幕| 亚洲成人黄色小说| 欧美成人三级在线| aaa亚洲精品| 婷婷成人激情在线网| 久久综合久久综合九色| 色综合久久综合网| 麻豆视频一区二区| 国产精品久久久久毛片软件| 欧美网站一区二区| 国产精品资源在线| 亚洲国产成人va在线观看天堂| 精品日韩在线一区| 色综合久久综合中文综合网| 免费成人你懂的| 国产精品萝li| 91精品免费观看| 99re在线精品| 精品一二三四区| 亚洲精品成人在线| 精品电影一区二区| 色综合久久88色综合天天免费| 美国一区二区三区在线播放| 中文字幕在线不卡一区| 日韩一区二区三区视频在线 | 国产精品看片你懂得 | 亚洲国产成人高清精品| 久久无码av三级| 精品视频在线视频| 99精品偷自拍| 国产一区二区精品在线观看| 亚洲最大的成人av| 国产欧美日韩久久| 日韩一区二区在线观看| 91成人在线观看喷潮| 国产不卡高清在线观看视频| 欧美96一区二区免费视频| 一区二区三区四区乱视频| 国产欧美视频一区二区三区| 欧美成人精品二区三区99精品| 欧美午夜宅男影院| 99综合电影在线视频| 国产精品99精品久久免费| 蜜桃一区二区三区在线| 亚洲一区二区在线免费看| 国产精品入口麻豆原神| 精品成a人在线观看| 91精品国产综合久久久蜜臀图片| 色欲综合视频天天天| 成人免费毛片app| 国产一区二区三区电影在线观看 | 成人av资源站| 国产精品夜夜爽| 国产在线一区二区| 久久99在线观看| 青娱乐精品视频| 日韩一区精品视频| 午夜免费久久看| 亚洲va欧美va国产va天堂影院| 一区二区三区在线观看网站| 亚洲色图在线播放| 亚洲日本在线观看|