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

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

?? os_msg.c

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

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

#if EN_OS_MSG > 0

/*********************************************************************************************************
** 函數名稱: OSMsgAccept
** 功能描述: 無等待獲取消息
** 輸 入: TaskId:用于返回發送消息的任務的任務ID
**         err:錯誤狀態
** 輸 出: 指向消息的無類型指針
** 作 者: 陳明計
** 日 期: 2005年6月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_MSG_ACCEPT > 0
        void * OSMsgAccept(TASK_ID *TaskId, uint8 *err)
{
    void *Rt;
    OS_TCB *Tcb;
    
    OS_ENTER_CRITICAL();
    if ((OSTCBCur->OSTCBInfo & OS_INFO_MSG) != 0)   /* 如果有消息           */
    {
        Tcb = OSTCBCur->MsgHard;
        Rt = Tcb->Msg;                              /* 返回消息             */
        *TaskId = Tcb->OSTCBId;                     /* 返回發送消息的任務   */
        /* 從隊列中刪除發送消息的任務   */
        OSTCBCur->MsgHard = Tcb->MsgNext;
        Tcb->MsgNext = NULL;
        Tcb->MsgPrev = NULL;
        if (OSTCBCur->MsgHard == NULL)
        {
            OSTCBCur->MsgEnd = NULL;
        }
        
        *err = OS_NO_ERR;
        Tcb->OSTCBInfo |= OS_INFO_MSG_SENGED;       /* 指明發送消息的任務獲已經發送了消息   */
        /* 如果發送消息的任務在等待消息發送完畢,恢復它 */
        if ((Tcb->OSTCBStat & OS_STAT_MSG_SENGED) != 0)
        {
            Tcb->OSTCBStat = 0;
            _OS_TaskResume(Tcb);
            OSSched();
        }
    }
    else
    {
        *err = OS_MSG_EMPTY;
        Rt = NULL;
    }
    if (OSTCBCur->MsgHard == NULL)
    {
        OSTCBCur->OSTCBInfo &= ~OS_INFO_MSG;
    }
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSMsgPend
** 功能描述: 等待消息
** 輸 入: Tick:超時時間
**         TaskId:用于返回發送消息的任務的任務ID
**         err:錯誤狀態
** 輸 出: 指向消息的無類型指針
** 作 者: 陳明計
** 日 期: 2005年6月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_MSG_PENT > 0
        void * OSMsgPend(uint8 Tick, TASK_ID *TaskId, uint8 *err)
{
    void *Rt;
    OS_TCB *Tcb;

    OS_ENTER_CRITICAL();
    if ((OSTCBCur->OSTCBInfo & OS_INFO_MSG) == 0)   /* 如果沒有消息         */
    {
        OSTCBCur->OSTCBStat |= OS_INFO_MSG;
        if (Tick > 0)
        {
            OS_TimeDly(Tick);                               /* 超時設置      */
        }
        else
        {
            _OS_TaskSuspend(OSTCBCur);                      /* 從優先級鏈表中刪除 */
        }
        OSSched();
    }
    /* 以下部分注釋參考OSMsgAccept */
    if ((OSTCBCur->OSTCBInfo & OS_INFO_MSG) != 0)
    {
        Tcb = OSTCBCur->MsgHard;
        Rt = Tcb->Msg;
        *TaskId = Tcb->OSTCBId;
        OSTCBCur->MsgHard = Tcb->MsgNext;
        Tcb->MsgNext = NULL;
        Tcb->MsgPrev = NULL;
        if (OSTCBCur->MsgHard == NULL)
        {
            OSTCBCur->MsgEnd = NULL;
        }
        *err = OS_NO_ERR;
        Tcb->OSTCBInfo |= OS_INFO_MSG_SENGED;
        if ((Tcb->OSTCBStat & OS_STAT_MSG_SENGED) != 0)
        {
            Tcb->OSTCBStat = 0;
            _OS_TaskResume(Tcb);
            OSSched();
        }
    }
    else
    {
        *err = OS_TIMEOUT;
        Rt = NULL;
    }
    if (OSTCBCur->MsgHard == NULL)
    {
        OSTCBCur->OSTCBInfo &= ~OS_INFO_MSG;
    }
    OS_EXIT_CRITICAL();
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSMsgPost
** 功能描述: FIFO方式發送消息
** 輸 入: TaskId:消息的目的任務ID
**         Msg:消息
** 輸 出: OS_NO_ERR:成功
**         OS_TASKID_INVALID:目標任務不存在
**         OS_MSG_SEND_ERR:消息發送錯誤
** 作 者: 陳明計
** 日 期: 2005年6月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_MSG_POST > 0
        uint8 OSMsgPost(TASK_ID TaskId, void *Msg)
{
    OS_TCB *Tcb;
    uint8 Rt;

    /* 目的必須有效 */
    Rt = OS_TASKID_INVALID;
    if (TaskId < OS_MAX_TASKS)
    if (TaskId != OSTCBCur->OSTCBId)                            /* 不能發給自身     */
    {
        Rt = OS_MSG_SEND_ERR;
        if ((OSTCBCur->OSTCBInfo & OS_INFO_MSG_SENGED) != 0)    /* 上次發送消息完畢 */
        {
            Rt = OS_TASKID_INVALID;
            OS_ENTER_CRITICAL();
            Tcb = &(OSTCBTbl[TaskId]);
            if (Tcb->OSTCBStat != OS_STAT_DEATH)                /* 目標確實存在     */
            {
                /* 發送消息 */
                OSTCBCur->OSTCBInfo &= ~(OS_INFO_MSG_SENGED | OS_INFO_MSG_BACK);
                OSTCBCur->Msg = Msg;
                /* 把任務加入鏈表 */
                OSTCBCur->MsgNext = NULL;
                OSTCBCur->MsgPrev = Tcb->MsgEnd;
                if (Tcb->MsgEnd != NULL)
                {
                    Tcb->MsgEnd->MsgNext = OSTCBCur;
                }
                if (Tcb->MsgHard == NULL)
                {
                    Tcb->MsgHard = OSTCBCur;
                }                
                Tcb->MsgEnd = OSTCBCur;
                
                Rt = OS_NO_ERR;
                Tcb->OSTCBInfo |= OS_INFO_MSG;
                if ((Tcb->OSTCBStat & OS_STAT_MSG) != 0)    /* 目標任務在等待消息 */
                {
                    Tcb->OSTCBStat = 0;
                    _OS_TaskResume(Tcb);
                    OSSched();
                }
            }
            OS_EXIT_CRITICAL();
        }
    }
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSMsgPostFront
** 功能描述: LIFO方式發送消息
** 輸 入: TaskId:消息的目的任務ID
**         Msg:消息
** 輸 出: OS_NO_ERR:成功
**         OS_TASKID_INVALID:目標任務不存在
**         OS_MSG_SEND_ERR:消息發送錯誤
** 作 者: 陳明計
** 日 期: 2005年6月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_MSG_POST_FRONT > 0
        uint8 OSMsgPostFront(TASK_ID TaskId, void * Msg)
{
    OS_TCB *Tcb;
    uint8 Rt;
    
    /* 注釋參考OSMsgPost */
    Rt = OS_TASKID_INVALID;
    if (TaskId < OS_MAX_TASKS)
    if (TaskId != OSTCBCur->OSTCBId)
    {
        Rt = OS_MSG_SEND_ERR;
        if ((OSTCBCur->OSTCBInfo & OS_INFO_MSG_SENGED) != 0)
        {
            Rt = OS_TASKID_INVALID;
            OS_ENTER_CRITICAL();
            Tcb = &(OSTCBTbl[TaskId]);
            if (Tcb->OSTCBStat != OS_STAT_DEATH)
            {
                OSTCBCur->OSTCBInfo &= ~(OS_INFO_MSG_SENGED | OS_INFO_MSG_BACK);
                OSTCBCur->Msg = Msg;
                OSTCBCur->MsgPrev = NULL;
                OSTCBCur->MsgNext = Tcb->MsgHard;
                if (Tcb->MsgHard != NULL)
                {
                    Tcb->MsgHard->MsgPrev = OSTCBCur;
                }
                Tcb->MsgHard = OSTCBCur;            
                Rt = OS_NO_ERR;
                Tcb->OSTCBInfo |= OS_INFO_MSG;
                if ((Tcb->OSTCBStat & OS_STAT_MSG) != 0)
                {
                    Tcb->OSTCBStat = 0;
                    _OS_TaskResume(Tcb);
                    OSSched();
                }
            }
            OS_EXIT_CRITICAL();
        }
    }
    return Rt;
}
#endif

/*********************************************************************************************************
** 函數名稱: OSMsgNMsgs
** 功能描述: 取得指定任務的消息數
** 輸 入: TaskId:任務ID
** 輸 出: 消息數目
** 作 者: 陳明計
** 日 期: 2005年6月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if EN_OS_MSG_NMsgs > 0
        uint32 OSMsgNMsgs(TASK_ID TaskId)
{
    OS_TCB *Tcb;
    uint32 Rt;
    
    Rt = 0;
    Tcb = NULL;
    if (TaskId == OS_ID_SELF)
    {
        Tcb = OSTCBCur;
    }
    if (TaskId < OS_MAX_TASKS)
    {
        Tcb = &(OSTCBTbl[TaskId]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜a成v人精品| 亚洲v精品v日韩v欧美v专区| 亚洲大片一区二区三区| 亚洲综合在线第一页| 亚洲丝袜自拍清纯另类| 国产精品二区一区二区aⅴ污介绍| 久久―日本道色综合久久| 精品剧情在线观看| 精品动漫一区二区三区在线观看| 555夜色666亚洲国产免| 制服.丝袜.亚洲.中文.综合| 欧美一区二区在线看| 日韩亚洲欧美一区二区三区| 欧美成人aa大片| 久久久蜜桃精品| 国产精品福利av| 一区二区三区国产| 舔着乳尖日韩一区| 精品在线一区二区三区| 国产乱码精品一区二区三| 成人性生交大片免费看视频在线 | 中文字幕中文字幕一区二区| 中文字幕欧美日本乱码一线二线| 日本一区二区久久| 国产精品麻豆一区二区| 一区二区三区四区av| 日韩精品高清不卡| 精品一区二区三区在线观看| 国产激情视频一区二区三区欧美| 成人国产精品免费观看视频| 91麻豆.com| 91精品久久久久久久久99蜜臂| 精品国产伦一区二区三区观看体验| 亚洲精品在线观看网站| 中文一区二区完整视频在线观看 | 久久国产免费看| 成人免费黄色大片| 欧美影视一区二区三区| 日韩一区二区三区电影在线观看 | 首页综合国产亚洲丝袜| 久久成人免费电影| 91丨九色丨蝌蚪富婆spa| 欧美日韩一区二区欧美激情 | 美女脱光内衣内裤视频久久影院| 国产麻豆欧美日韩一区| 日本道色综合久久| 精品国产一区二区三区久久影院| 日韩一区在线免费观看| 青草国产精品久久久久久| 国产成人无遮挡在线视频| 欧美羞羞免费网站| 久久蜜臀精品av| 亚洲国产日韩a在线播放| 韩国av一区二区| 欧美性感一类影片在线播放| 精品福利二区三区| 亚洲一级二级在线| 国产69精品久久久久毛片| 欧美日本韩国一区二区三区视频| 久久影音资源网| 亚洲资源中文字幕| 大陆成人av片| 日韩欧美一区在线| 艳妇臀荡乳欲伦亚洲一区| 国产高清久久久| 欧美日韩www| 亚洲精品伦理在线| 福利一区二区在线| 欧美成人免费网站| 亚洲成人7777| 91一区二区三区在线观看| 欧美va亚洲va在线观看蝴蝶网| 亚洲一区av在线| 99riav一区二区三区| 欧美成人高清电影在线| 亚洲大片精品永久免费| 色综合咪咪久久| 中文字幕第一页久久| 国内外成人在线| 日韩一区二区三| 亚洲成在线观看| 91国偷自产一区二区三区成为亚洲经典| 精品精品国产高清一毛片一天堂| 三级欧美在线一区| 欧美调教femdomvk| 亚洲精品欧美激情| 一本久久精品一区二区| 日本一区二区久久| 国产成人免费网站| 久久夜色精品国产欧美乱极品| 日本美女一区二区三区视频| 欧美三级在线看| 一区二区日韩电影| 在线一区二区视频| 一区二区三区在线不卡| 91亚洲精品乱码久久久久久蜜桃| 国产人妖乱国产精品人妖| 美国十次综合导航| 91精品国产一区二区| 天天综合色天天综合色h| 欧美日韩免费电影| 午夜欧美一区二区三区在线播放| 91国内精品野花午夜精品| 亚洲欧美一区二区三区孕妇| 色综合久久中文综合久久97| 一区精品在线播放| 99re66热这里只有精品3直播 | 大陆成人av片| 国产精品毛片a∨一区二区三区| 国产98色在线|日韩| 国产免费成人在线视频| 成人午夜电影小说| 综合在线观看色| 日本高清不卡一区| 丝瓜av网站精品一区二区| 欧美一区二区三级| 韩国v欧美v日本v亚洲v| 国产无遮挡一区二区三区毛片日本| 国产精品18久久久| 国产精品午夜免费| 在线观看视频一区二区欧美日韩| 一区二区三区**美女毛片| 欧美伦理视频网站| 久久成人综合网| 国产精品毛片大码女人| 91国偷自产一区二区三区观看 | 亚洲一区二区av电影| 在线电影欧美成精品| 美女网站一区二区| 欧美国产精品一区二区三区| 91丨国产丨九色丨pron| 亚洲r级在线视频| 欧美一区二区黄色| 成人精品视频.| 伊人色综合久久天天人手人婷| 欧美高清精品3d| 国产美女在线精品| 一区二区三区蜜桃| 欧美一级精品大片| 大胆欧美人体老妇| 五月天亚洲精品| 国产欧美一区在线| 欧洲一区在线电影| 久久av资源网| 亚洲欧洲一区二区在线播放| 欧美日韩aaaaaa| 国产91精品久久久久久久网曝门| 亚洲自拍偷拍av| 久久午夜免费电影| 欧美三电影在线| 精品一区二区三区蜜桃| 亚洲欧美电影一区二区| 日韩视频免费观看高清完整版| 成人一区二区三区在线观看| 亚洲第一久久影院| 中文字幕欧美日韩一区| 欧美精品日韩综合在线| 国产成人精品一区二| 首页国产丝袜综合| 一区在线中文字幕| www成人在线观看| 欧美无砖砖区免费| 国产成都精品91一区二区三| 日韩av不卡一区二区| 国产精品久久久久久久久搜平片 | 在线成人av影院| 北条麻妃国产九九精品视频| 丝袜美腿成人在线| 亚洲乱码国产乱码精品精可以看| 精品国产第一区二区三区观看体验| 91网上在线视频| 国产成人午夜精品5599| 六月丁香婷婷色狠狠久久| 亚洲一区免费观看| 国产精品美日韩| 精品国产乱码久久久久久1区2区| 欧美怡红院视频| 91香蕉视频在线| 粉嫩av亚洲一区二区图片| 奇米精品一区二区三区在线观看 | 国产乱国产乱300精品| 性感美女极品91精品| 国产精品成人一区二区艾草 | 中文字幕亚洲视频| 精品国产一区二区三区忘忧草| 欧美日韩成人一区| 欧美日韩视频在线第一区 | 亚洲欧洲日产国码二区| 久久精品一区二区三区不卡 | 伊人开心综合网| 国产精品美女一区二区| 久久久精品综合| 精品国产一区a| 精品免费日韩av| 精品欧美乱码久久久久久 | 亚洲日本电影在线| 国产精品久久福利| 国产精品传媒在线| 中文字幕一区av| 亚洲色图另类专区|