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

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

?? os_task.c

?? S3C2410A的UCOS內核,可以供ARM初學初學者使用
?? C
?? 第 1 頁 / 共 3 頁
字號:
                        OS_STK  *pbos,
                        INT32U   stk_size,
                        void    *pext,
                        INT16U   opt)
{
#if OS_CRITICAL_METHOD == 3                  /* 為CPU狀態寄存器分配存儲變量               */
    OS_CPU_SR  cpu_sr;
#endif
    OS_STK    *psp;
    INT8U      err;


#if OS_ARG_CHK_EN > 0
    if (prio > OS_LOWEST_PRIO) 
    {                                           /* 確認優先級在許可范圍之內           */
        return (OS_PRIO_INVALID);
    }
#endif
    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) 
    {                                                 /* 確認優先級未被其他任務占用  */
        OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* 保留該優先級避免其他處理 ...  */
                                             /* ... 直到任務建立.              */
        OS_EXIT_CRITICAL();

        if (((opt & OS_TASK_OPT_STK_CHK) != 0x0000) ||   /* 如果使能堆棧檢驗     */
            ((opt & OS_TASK_OPT_STK_CLR) != 0x0000)) 
            {                                            /* 如果堆棧需要清零           */
            #if OS_STK_GROWTH == 1
            (void)memset(pbos, 0, stk_size * sizeof(OS_STK));
            #else
            (void)memset(ptos, 0, stk_size * sizeof(OS_STK));
            #endif
            }

        psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, opt); /* 初始化任務堆棧          */
        err = OS_TCBInit(prio, psp, pbos, id, stk_size, pext, opt);
        if (err == OS_NO_ERR) 
        {
            OS_ENTER_CRITICAL();
            OSTaskCtr++;                                       /* 增加任務計數器        */
            OS_EXIT_CRITICAL();
            if (OSRunning == TRUE) 
            {                           /* 如果多任務啟動尋找最高優先級任務 */
                OS_Sched();
            }
        } 
        else 
        {
            OS_ENTER_CRITICAL();
            OSTCBPrioTbl[prio] = (OS_TCB *)0;                  /*  放棄該優先級   */
            OS_EXIT_CRITICAL();
        }
        return (err);
    }
    OS_EXIT_CRITICAL();
    return (OS_PRIO_EXIST);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                            刪除任務
*
* 函數描述: 該函數為刪除任務。調用的任務通過設定自身的優先級別可以刪除自身。被刪除的任務返回到睡眠狀態,并
*           通過再次創建刪除掉的任務來重新激活。
*
* 輸入參數: prio   待刪除任務的優先級。注意,如果不知當前任務的優先級可通過設定為OS_PRIO_SELF來刪除當前任務。
*                   
*      
* 返回值    : OS_NO_ERR           調用成功
*             OS_TASK_DEL_IDLE    想刪除 uC/OS-II 的空閑任務
*             OS_PRIO_INVALID     指定的優先級高于允許的最大值
*                                 (例如. >= OS_LOWEST_PRIO)或沒有指定 OS_PRIO_SELF.
*             OS_TASK_DEL_ERR     想刪除的任務不存在
*             OS_TASK_DEL_ISR     想從中斷服務程序中刪除任務
*
* 注釋      : 1)為減少中斷隱患, OSTaskDel() 將關閉該任務:
*                    a) 通過脫離就緒
*                    b) 通過從等待列表中移除
*                    c) 通過避免 OSTimeTick() 使任務就緒待運行。
*                 該任務能從 uC/OS-II 中的雜項結構中脫離。
*              2) OS_EXIT_CRITICAL() 后調用 OS_Dummy()的意義是因為在大多數處理器中,緊跟開中斷指令的下
*                 一條指令常被忽略。
*              3) 中斷服務程序不能刪除任務
*              4) 如果當前任務正在被刪除,由于它已從就緒列表中移出,所以,它將不能被調度,上鎖嵌套計數器增加
*                 增加嵌套計數器是避免其他任務被調度。也就是一個中斷服務程序將返回到當前正被刪除的任務。
*                 刪除剩余部分將完成。
*********************************************************************************************************
*/
/*$PAGE*/
#if OS_TASK_DEL_EN > 0
INT8U  OSTaskDel (INT8U prio)
{
#if OS_CRITICAL_METHOD == 3                      /* 為CPU狀態寄存器分配存儲變量           */
    OS_CPU_SR     cpu_sr;
#endif

#if OS_EVENT_EN > 0
    OS_EVENT     *pevent;
#endif    
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
    OS_FLAG_NODE *pnode;
#endif
    OS_TCB       *ptcb;
    BOOLEAN       self;


	self = self;                                            // 預防編譯警告
    if (OSIntNesting > 0)
     {                                                      /* 確保不是在ISR中刪除一個程序   */
        return (OS_TASK_DEL_ISR);
     }
#if OS_ARG_CHK_EN > 0
    if (prio == OS_IDLE_PRIO) 
    {                                                                       /* 不允許刪除空閑任務    */
        return (OS_TASK_DEL_IDLE);
    }
    if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) 
    {                                                            /* 任務優先級是否有效?              */
        return (OS_PRIO_INVALID);
    }
#endif
    OS_ENTER_CRITICAL();
    if (prio == OS_PRIO_SELF) 
    {                                                                         /* 是否請求刪除自身?   */
        prio = OSTCBCur->OSTCBPrio;                                     /* 設定刪除當前任務的優先級   */
    }
    ptcb = OSTCBPrioTbl[prio];
    
    if (ptcb != (OS_TCB *)0)                                         /* 要刪除的任務是否存在?      */
    {                                       
        if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) 
        {                                                            /* 使任務脫離就緒            */
            OSRdyGrp &= ~ptcb->OSTCBBitY;
        }
#if OS_EVENT_EN > 0
        pevent = ptcb->OSTCBEventPtr;                                /* 任務是否正在等待事件?        */
        if (pevent != (OS_EVENT *)0) 
        {                                                           
            if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0)
            {                                                                    /* ... 移除任務 */
                pevent->OSEventGrp &= ~ptcb->OSTCBBitY;                        /* ... 從事件控制塊 */
            }
        }
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
        pnode = ptcb->OSTCBFlagNode;
        if (pnode != (OS_FLAG_NODE *)0) 
        {                                                         /* 任務是否在等事件標志?    */
            OS_FlagUnlink(pnode);                               /* 從等待列表中移除               */
        }
#endif
        ptcb->OSTCBDly  = 0;                                    /* 避免 OSTimeTick() 更新  */
        ptcb->OSTCBStat = OS_STAT_RDY;                          /* 防止任務重新開始     */
		if (OSLockNesting < 255) 
		{
            OSLockNesting++;
		}
        OS_EXIT_CRITICAL();                                     /* 打開中斷忽略下一指令 */
        OS_Dummy();                                             /* ... 啞函數確保中斷關閉 */
        OS_ENTER_CRITICAL();                                    /* ... 此處關閉中斷                  */
		if (OSLockNesting > 0) 
		{
            OSLockNesting--;
		}
        OSTaskDelHook(ptcb);                                    /* 調用戶定義的鉤子函數              */
        OSTaskCtr--;                                            /* 任務數減一         */
        OSTCBPrioTbl[prio] = (OS_TCB *)0;                       /* 舊優先級任務清零            */
        if (ptcb->OSTCBPrev == (OS_TCB *)0) 
        {                                                        /* 從任務控制塊鏈上移除               */
            ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
            OSTCBList                  = ptcb->OSTCBNext;
        } 
        else 
        {
            ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
            ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
        }
        ptcb->OSTCBNext = OSTCBFreeList;                        /* 把任務控制塊返回到空余任務控制塊         */
        OSTCBFreeList   = ptcb;
        OS_EXIT_CRITICAL();
        OS_Sched();                                             /* 尋找新的最高優先級任務      */
        return (OS_NO_ERR);
    }
    OS_EXIT_CRITICAL();
    return (OS_TASK_DEL_ERR);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                    請求刪除自身
*
* 函數描述: 該函數用于:
*                   a) 通知任務刪除自身
*                   b) 其他任務請求當前任務刪除自身
*              首先,試圖刪除一個任務,但是該任務卻占用著一些內存緩沖區、信號量、郵箱、隊列等資源。
*              因為一些資源還未釋放,任務不該被刪。正在請求的任務調用 OSTaskDelReq() 來顯示需要刪除的任務。
*              例如,10號任務需被刪除。請求刪除的任務例如,5號,將調用 OSTaskDelReq(10)。當10號任務執行時,
*              它將調用 OSTaskDelReq(OS_PRIO_SELF),并檢測函數的返回值。如果返回值是OS_TASK_DEL_REQ,則5號請
*              求刪除10號任務。10號任務將如下:
*
*                   void Task(void *data)
*                   {
*                       .
*                       .
*                       while (1)
*                       {
*                           OSTimeDly(1);
*                           if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ) 
*                           {
*                               Release any owned resources;
*                               De-allocate any dynamic memory;
*                               OSTaskDel(OS_PRIO_SELF);
*                           }
*                       }
*                   }
*
* 輸入參數  : prio    被刪除的任務的優先級
*
* Returns    : OS_NO_ERR          如果任務存在,請求許可注冊
*              OS_TASK_NOT_EXIST  是否任務已被刪除。允許調用函數知道請求是否執行。
*              OS_TASK_DEL_IDLE   請求刪除的任務是否是 uC/OS-II的空閑任務
*              OS_PRIO_INVALID    指定的優先級是否高于允許的最大值。
*                                 (例如 >= OS_LOWEST_PRIO) 或沒有指定為 OS_PRIO_SELF.
*              OS_TASK_DEL_REQ    一個任務(可能是其他任務) 是否請求刪除正在運行的任務
*********************************************************************************************************
*/
/*$PAGE*/
#if OS_TASK_DEL_EN > 0
INT8U  OSTaskDelReq (INT8U prio)
{
#if OS_CRITICAL_METHOD == 3                      /* 為CPU狀態寄存器分配存儲變量           */
    OS_CPU_SR  cpu_sr;
#endif
    BOOLEAN    stat;
    INT8U      err;
    OS_TCB    *ptcb;


#if OS_ARG_CHK_EN > 0
    if (prio == OS_IDLE_PRIO) 
    {                                                                    /* 不允許刪除空閑任務     */
        return (OS_TASK_DEL_IDLE);
    }
    if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) 
    {                                                                 /* 任務優先級是否有效 ?               */
        return (OS_PRIO_INVALID);
    }
#endif
    if (prio == OS_PRIO_SELF) 
    {                                                             /* 是否一個任務正在請求 ...  */
        OS_ENTER_CRITICAL();                                    /* ... 這個任務要刪除自身      */
        stat = OSTCBCur->OSTCBDelReq;                           /* 返回給調用函數的請求狀態     */
        OS_EXIT_CRITICAL();
        return (stat);
    }
    OS_ENTER_CRITICAL();
    ptcb = OSTCBPrioTbl[prio];
    if (ptcb != (OS_TCB *)0) 
    {                                                            /* 要刪除的任務必須存在           */
        ptcb->OSTCBDelReq = OS_TASK_DEL_REQ;                    /* 設定標志顯示任務被刪除 */
        err               = OS_NO_ERR;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久青草欧美一区二区三区| 亚洲一区二区欧美日韩| av中文字幕不卡| 美国欧美日韩国产在线播放| 亚洲欧洲精品一区二区三区不卡| 日韩精品综合一本久道在线视频| 99国产精品久久| 国产成人av电影在线| 久久99国内精品| 男人的天堂亚洲一区| 亚洲欧美日韩人成在线播放| 国产精品私人自拍| 精品粉嫩超白一线天av| 欧美一区二区福利在线| 欧美亚洲国产一区在线观看网站| 99麻豆久久久国产精品免费优播| 国产精品18久久久久久久网站| 老司机免费视频一区二区| 夜夜嗨av一区二区三区中文字幕| 久久综合九色综合欧美就去吻| 日韩午夜av一区| 日韩午夜精品电影| 日韩一级二级三级| 欧美成人vr18sexvr| 日韩午夜激情电影| 精品久久人人做人人爽| 精品国产三级a在线观看| 精品区一区二区| 精品国产91久久久久久久妲己 | 99vv1com这只有精品| 国产精品77777| 成人免费看黄yyy456| 粉嫩久久99精品久久久久久夜 | 欧美精品vⅰdeose4hd| 欧美亚洲国产bt| 欧美性猛交xxxx黑人交| 欧美剧情片在线观看| 精品久久久久久久久久久院品网| 久久综合久色欧美综合狠狠| 久久久久久毛片| 精品日韩一区二区| 亚洲特黄一级片| 亚洲激情av在线| 毛片av一区二区| 成人黄色在线看| 欧美日韩国产精选| 久久久一区二区三区| 国产精品免费丝袜| 一区二区三区加勒比av| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久99久久99精品免视看婷婷 | 欧美一级夜夜爽| 26uuu精品一区二区| 亚洲精品一线二线三线无人区| 日韩亚洲电影在线| 亚洲精品成人a在线观看| 亚洲另类一区二区| 韩国女主播成人在线观看| 99久久精品免费看| 欧美一区二区三区爱爱| 中文在线资源观看网站视频免费不卡 | 91精品久久久久久久99蜜桃| 欧美军同video69gay| 亚洲国产激情av| 亚洲精品日韩专区silk| 老司机免费视频一区二区| 99久久99久久免费精品蜜臀| 日韩视频一区在线观看| 自拍偷自拍亚洲精品播放| 麻豆成人免费电影| 成人免费高清视频| 欧美精选午夜久久久乱码6080| 国产亚洲欧美激情| 日本伊人午夜精品| 欧洲国内综合视频| **欧美大码日韩| 国产精品综合二区| 日韩一区国产二区欧美三区| 亚洲精品videosex极品| 粉嫩一区二区三区性色av| 欧美大片国产精品| 亚洲午夜精品在线| 成人av片在线观看| 日韩欧美国产小视频| 亚洲午夜精品17c| 欧美专区日韩专区| 亚洲免费高清视频在线| 91在线视频播放地址| 日本一区二区三区国色天香| 狠狠久久亚洲欧美| 欧美精品一区二区三区蜜桃| 日韩电影在线一区二区| 色欧美乱欧美15图片| 日韩女优视频免费观看| 精品一区二区三区免费视频| 日韩免费电影一区| 久久国产夜色精品鲁鲁99| 欧美成人三级在线| 狠狠狠色丁香婷婷综合激情| 精品国精品国产| 国产在线视视频有精品| 久久九九久久九九| 国产成人啪午夜精品网站男同| 久久精品一区二区| 国内精品免费**视频| www激情久久| 成人av在线影院| 亚洲精品国产一区二区精华液 | 麻豆精品一区二区| 亚洲精品一区二区三区四区高清| 国产乱码一区二区三区| 日本一区二区成人在线| 色综合婷婷久久| 午夜视频在线观看一区二区| 91麻豆精品国产91久久久资源速度| 国产精品看片你懂得| 欧美色综合影院| 狠狠色丁香婷婷综合| 国产精品久久久久影院亚瑟| aaa亚洲精品| 亚洲制服丝袜av| 欧美不卡一区二区三区| 成人免费观看视频| 亚洲丝袜制服诱惑| 99精品桃花视频在线观看| 亚洲一区二区视频| 精品国产123| 99久久综合精品| 亚洲成av人**亚洲成av**| 日韩精品一区二区三区视频在线观看| 国产综合成人久久大片91| 1区2区3区欧美| 欧美片在线播放| 国产成人免费视频一区| 亚洲综合在线观看视频| 精品国精品自拍自在线| 972aa.com艺术欧美| 蜜桃久久精品一区二区| 中文字幕在线不卡一区二区三区| 欧美日韩mp4| www.久久久久久久久| 久久不见久久见中文字幕免费| 亚洲精品一区二区三区四区高清| 91丨porny丨国产入口| 激情综合亚洲精品| 日本成人在线看| 亚洲乱码一区二区三区在线观看| 久久这里只有精品视频网| 欧美日韩激情在线| 免费在线看一区| 国产精品三级在线观看| 日韩一级成人av| 欧美日韩高清一区二区三区| 91久久精品一区二区二区| 99re在线精品| 在线日韩一区二区| 精品视频在线免费看| 欧美欧美欧美欧美| 日韩欧美自拍偷拍| 欧美一区二区三区在| 欧美一级在线观看| 精品99999| 国产精品久久久久久久久快鸭 | 国产精品色婷婷久久58| 国产日产欧美精品一区二区三区| 26uuu欧美| 自拍视频在线观看一区二区| 亚洲视频图片小说| 亚洲一区二区在线观看视频| 亚洲国产精品久久人人爱蜜臀| 亚洲成av人片在线观看无码| 日韩福利电影在线| 国产精品亚洲а∨天堂免在线| 丁香婷婷深情五月亚洲| 91捆绑美女网站| 欧美日韩大陆在线| 久久久综合视频| 亚洲人成在线播放网站岛国 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线观看日产精品| 欧美一级二级三级蜜桃| 久久网站热最新地址| 中国色在线观看另类| 亚洲福中文字幕伊人影院| 国产中文一区二区三区| 成人午夜电影网站| 欧美这里有精品| 欧美精品一区二区三区很污很色的| 久久影院午夜论| 亚洲欧美视频一区| 蜜臀久久99精品久久久画质超高清 | 欧美性欧美巨大黑白大战| 制服丝袜成人动漫| 国产婷婷色一区二区三区| 亚洲综合色在线| 国内精品免费在线观看| 欧美天堂亚洲电影院在线播放| 欧美一级黄色大片| 亚洲欧美另类小说| 国产精品99久|