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

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

?? os_task.c

?? S3C2410A的UCOS內核,可以供ARM初學初學者使用
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
*********************************************************************************************************
*                                           uC/OS-II 實時內核
*                                               任務管理
*
*                            (c) 版權 1992-2002, 所有版權歸Jean J. Labrosse, Weston, FL 
*                                         
*
* 文件名稱 :          OS_TASK.C                     
* 程序作者 :          Jean J. Labrosse 
*********************************************************************************************************
*/ 

#ifndef  OS_MASTER_FILE
#include "includes.h"
#endif

/*
*********************************************************************************************************
*                                        改變任務的優先級
*
* 程序描述:    本函數可以動態地改變任務的優先級。但是,新改變的優先級必須有效。
*
* 輸入參數:    oldp     舊的優先級
*
*              newp     新的優先級
*
* 返回值:      OS_NO_ERR        調用成功
*              OS_PRIO_INVALID  如果定義的優先級高于最大的許可范圍,則返回該參數
*                               (例如 >= OS_LOWEST_PRIO)
*              OS_PRIO_EXIST    如果新的優先級已經存在,則返回該參數
*              OS_PRIO_ERR      找不到舊的優先級對應的任務,則返回該參數 (例如 舊優先級的任務已不存在)
*                               
*********************************************************************************************************
*/

#if OS_TASK_CHANGE_PRIO_EN > 0
INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
{
#if OS_CRITICAL_METHOD == 3                      /* 給CPU狀態寄存器分配存儲變量                          */
    OS_CPU_SR    cpu_sr;
#endif

#if OS_EVENT_EN > 0
    OS_EVENT    *pevent;
#endif

    OS_TCB      *ptcb;
    INT8U        x;
    INT8U        y;
    INT8U        bitx;
    INT8U        bity;

#if OS_ARG_CHK_EN > 0
    if ((oldprio >= OS_LOWEST_PRIO && oldprio != OS_PRIO_SELF)  ||
         newprio >= OS_LOWEST_PRIO) 
       {
        return (OS_PRIO_INVALID);
       }
#endif

    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[newprio] != (OS_TCB *)0)
       {                                                        /*  新優先級是否已經存在?               */
        OS_EXIT_CRITICAL();
        return (OS_PRIO_EXIST);
       } 
    else 
       {
        OSTCBPrioTbl[newprio] = (OS_TCB *)1;                    /* 保留該優先級避免其他處理              */
        OS_EXIT_CRITICAL();
        y    = newprio >> 3;                                    /* 預先計算減少中斷隱患                  */
        bity = OSMapTbl[y];
        x    = newprio & 0x07;
        bitx = OSMapTbl[x];
        OS_ENTER_CRITICAL();
        if (oldprio == OS_PRIO_SELF) 
          {                                                     /* 是否改變自身?                        */
            oldprio = OSTCBCur->OSTCBPrio;                      /* 是,得到優先級                        */
          }
        ptcb = OSTCBPrioTbl[oldprio];
        if (ptcb != (OS_TCB *)0) 
        {                                                       /* 待改變優先級的任務是否存在?          */
            OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                /* 從舊優先級中去除任務控制塊            */
            if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00)  /* 如果任務就緒,讓其脫離就緒。     */
             {                                                     
                if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) 
                {
                    OSRdyGrp &= ~ptcb->OSTCBBitY;
                }
                OSRdyGrp    |= bity;                            /* 讓新的優先級就緒      */
                OSRdyTbl[y] |= bitx;
#if OS_EVENT_EN > 0
             } 
            else 
            {
                pevent = ptcb->OSTCBEventPtr;
                if (pevent != (OS_EVENT *)0) 
                {                                               /* 從事件等待列表中移除舊的優先級          */
                    if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) 
                    {
                        pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
                    }
                    pevent->OSEventGrp    |= bity;              /* 讓新的優先級加入等待列表                */
                    pevent->OSEventTbl[y] |= bitx;
                }
#endif
            }
            OSTCBPrioTbl[newprio] = ptcb;                       /* 設置指向新優先級任務控制塊的指針        */
            ptcb->OSTCBPrio       = newprio;                    /* 設置新的任務優先級                      */
            ptcb->OSTCBY          = y;
            ptcb->OSTCBX          = x;
            ptcb->OSTCBBitY       = bity;
            ptcb->OSTCBBitX       = bitx;
            OS_EXIT_CRITICAL();
            OS_Sched();                                         /* 運行就緒的最高優先級的任務              */
            return (OS_NO_ERR);
        } 
        else 
        {
            OSTCBPrioTbl[newprio] = (OS_TCB *)0;                /* 釋放保留的優先級                        */
            OS_EXIT_CRITICAL();
            return (OS_PRIO_ERR);                               /* 改變任務的優先級不存在                  */
        }
    }
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                                            創建任務
*
* 函數描述:    該函數用于 uC/OS-II 管理任務的執行。任務可在啟動多任務之前建立,也可在運行中的任務中建立。
*              任務不能在中斷服務子程序中建立。
*
* 輸入參數  :  task     指向任務代碼的指針
*
*              pdata   當任務首先執行時,指向能把可選數據地址內的參數傳遞給任務的指針。 被調用和傳遞
*                      參數如下:
*
*                           void Task (void *pdata)
*                           {
*                               for (;;) {
*                                   Task code;
*                               }
*                           }
*
*              ptos     指向任務堆棧棧頂的指針。  如果配置常量OS_STK_GROWTH設為1,堆棧向下增長(從高
*                       存儲地址到低存儲地址)。因此,'pstk' 將指向堆棧的最高的有效的存儲位置。如果
*                       OS_STK_GROWTH 設為0,'pstk' 將指向堆棧的最低的存儲位置。并且,堆棧將向上增長。                       memory locations.
*
*              prio     任務的優先級別。每一個任務需分配不同的優先級。數字越小,優先級別越高。
*
* 返回值    : OS_NO_ERR        函數建立成功
*             OS_PRIO_EXIT     任務優先級已經存在                               
*             OS_PRIO_INVALID  指定的優先級高于允許的最大值
*                               (例如 >= OS_LOWEST_PRIO)
*********************************************************************************************************
*/

#if OS_TASK_CREATE_EN > 0
INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
{
#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();
        psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);    /* 初始化任務堆棧        */
        err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
        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*/
/*
*********************************************************************************************************
*                                    創建任務 (擴展函數)
*
* 函數描述:   該函數用于 uC/OS-II 管理任務的執行。任務可在啟動多任務之前建立,也可在運行中的任務中建立。
*             任務不能在中斷服務子程序中建立。該函數近似于 OSTaskCreate(),除了允許指定任務的一些補充信息。
*
* 輸入參數  : task     指向任務代碼的指針
*
*             pdata   當任務首先執行時,指向能把可選數據地址內的參數傳遞給任務的指針。 被調用和傳遞
*                      參數如下:
*
*                           void Task (void *pdata)
*                           {
*                               for (;;) {
*                                   Task code;
*                               }
*                           }
*
*             ptos     指向任務堆棧棧頂的指針。  如果配置常量OS_STK_GROWTH設為1,堆棧向下增長(從高
*                       存儲地址到低存儲地址)。因此,'pstk' 將指向堆棧的最高的有效的存儲位置。如果
*                       OS_STK_GROWTH 設為0,'pstk' 將指向堆棧的最低的存儲位置。并且,堆棧將向上增長。
*                      'pstk' 一定指向一個有效的空余數據單元。
*
*             prio     任務的優先級別。每一個任務需分配不同的優先級。數字越小,優先級別越高。
*
*
*             id       任務的識別號 (0..65535)
*
*             pbos     指向任務棧底的指針。如果配置常量OS_STK_GROWTH 設為1,堆棧向下增長(從高
*                       存儲地址到低存儲地址)。因此,‘pbos' 將指向堆棧的最低的存儲位置(有效)。如果
*                       OS_STK_GROWTH 設為0, 'pbos'將指向堆棧的最高的存儲位置。堆棧從低向高增長。
*                       'pbos' 一定指向一個有效的空余數據單元。
*
*             stk_size 指定堆棧的容量。如果 OS_STK 設定為 INT8U,則'stk_size'則包含該數量個字節,如果
*                        OS_STK 定義為 INT16U,則包含該數量個半字,如果OS_STK 設定為 INT32U,則'stk_size' 
*                       包含該數量個字。
*
*             pext     指向用戶附加的數據域的指針,用來擴展任務中任務控制塊。
*                       例如,這個用戶存儲器在任務切換中能保持浮點寄存器,每個任務的執行時間,任務切換次數。
*
*             opt      包含補充信息。當高8位應用時,低8位由 uC/OS-II 保留。見uCOS-II.H文件中OS_TASK_OPT_??? 
*
* 返回值    : OS_NO_ERR        函數建立成功
*             OS_PRIO_EXIT     任務優先級已經存在                               
*             OS_PRIO_INVALID  指定的優先級高于允許的最大值
*                               (例如 >= OS_LOWEST_PRIO)
*********************************************************************************************************
*/
/*$PAGE*/
#if OS_TASK_CREATE_EXT_EN > 0
INT8U  OSTaskCreateExt (void   (*task)(void *pd),
                        void    *pdata,
                        OS_STK  *ptos,
                        INT8U    prio,
                        INT16U   id,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄页视频在线91| 日韩精品资源二区在线| 日韩一区二区三区观看| 国产欧美日韩另类视频免费观看| 一区二区久久久久| 国产.精品.日韩.另类.中文.在线.播放 | 一区二区三区中文免费| 国产资源精品在线观看| 欧美人与禽zozo性伦| 亚洲免费在线看| 不卡一卡二卡三乱码免费网站| 精品国产区一区| 美女一区二区三区| 欧美日韩成人综合| 亚洲一区二区不卡免费| 99亚偷拍自图区亚洲| 久久精品综合网| 国产美女精品在线| 久久看人人爽人人| 国产乱子轮精品视频| 久久午夜电影网| 狠狠色综合色综合网络| 欧美电影免费观看完整版| 免费视频最近日韩| 717成人午夜免费福利电影| 亚洲精品伦理在线| 91老师片黄在线观看| 国产精品美女久久久久久久久久久| 国产一区二区h| 国产亚洲欧美一级| 风间由美一区二区三区在线观看| 亚洲精品一区二区在线观看| 另类小说欧美激情| 久久久99精品免费观看| 韩国欧美国产1区| 久久精品欧美日韩| 成人黄色国产精品网站大全在线免费观看 | 国产日韩在线不卡| 波波电影院一区二区三区| 国产精品天美传媒沈樵| 91麻豆国产在线观看| 亚洲色图另类专区| 欧洲精品中文字幕| 日韩和欧美一区二区三区| 91精品国产乱码| 国产伦精品一区二区三区视频青涩| 欧美经典三级视频一区二区三区| 成人免费精品视频| 亚洲摸摸操操av| 欧美精品乱码久久久久久| 日本怡春院一区二区| 久久影视一区二区| 99v久久综合狠狠综合久久| 一区二区三区在线观看动漫| 精品视频999| 国产一区二区三区精品欧美日韩一区二区三区 | 粉嫩高潮美女一区二区三区| 国产欧美日韩卡一| 欧美日韩精品系列| 国产乱人伦偷精品视频免下载| 国产精品青草综合久久久久99| 欧美亚洲一区三区| 韩国女主播成人在线| 亚洲免费观看高清完整版在线观看熊| 欧美日韩亚洲综合| 国产91丝袜在线播放0| 亚洲成av人综合在线观看| 精品国精品国产| 一本一本久久a久久精品综合麻豆| 日韩av电影免费观看高清完整版| 国产婷婷色一区二区三区四区| 91久久免费观看| 久久99精品一区二区三区| 亚洲你懂的在线视频| 久久伊人蜜桃av一区二区| 欧美在线免费视屏| 国产一二三精品| 水野朝阳av一区二区三区| 国产精品午夜在线观看| 日韩欧美不卡一区| 欧美视频在线观看一区二区| 国产精品一二三区| 免费精品99久久国产综合精品| 国产精品免费av| 精品精品国产高清a毛片牛牛| 欧美在线播放高清精品| 不卡影院免费观看| 国产一区二区女| 日韩专区中文字幕一区二区| 综合欧美一区二区三区| 欧美一区二区国产| 欧美肥妇bbw| 欧美性色aⅴ视频一区日韩精品| 成人精品国产福利| 国产毛片精品视频| 久久99日本精品| 日韩黄色一级片| 视频在线在亚洲| 亚洲一区二区综合| 一区二区三区高清| 一区二区三区鲁丝不卡| 亚洲久草在线视频| 亚洲视频资源在线| 亚洲视频网在线直播| 中文字幕乱码久久午夜不卡| 日本一区二区免费在线观看视频 | 日韩午夜小视频| 欧美日韩国产综合久久| 色999日韩国产欧美一区二区| 99精品国产99久久久久久白柏| 国产精品白丝jk白祙喷水网站| 韩国中文字幕2020精品| 精品一二三四区| 国产在线播放一区三区四| 韩国女主播一区| 国产高清在线精品| 成人性视频免费网站| 成人毛片在线观看| 99re在线精品| 欧洲精品在线观看| 欧美精品 国产精品| 欧美日韩精品综合在线| 欧美一区二区视频在线观看2020 | 国产精品中文字幕日韩精品| 黑人巨大精品欧美黑白配亚洲| 韩日精品视频一区| 成人av网站在线| 色悠久久久久综合欧美99| 在线观看亚洲精品视频| 91.xcao| 久久久久久久久久久黄色| 国产精品麻豆欧美日韩ww| 最新国产精品久久精品| 一个色综合网站| 激情五月播播久久久精品| 国产精一区二区三区| 色婷婷亚洲婷婷| 日韩午夜av电影| 国产精品久久夜| 亚洲成人免费视| 国产白丝精品91爽爽久久| 91国产视频在线观看| 日韩欧美一级精品久久| 欧美国产精品专区| 午夜视频一区二区三区| 国产一区不卡在线| 欧美性三三影院| 国产免费成人在线视频| 一区二区三区精品在线观看| 国内精品视频666| 一本色道久久综合亚洲aⅴ蜜桃| 9191国产精品| 国产精品福利一区二区三区| 丝袜亚洲另类丝袜在线| eeuss影院一区二区三区| 555www色欧美视频| 亚洲三级在线观看| 久久电影国产免费久久电影| 色综合久久久久综合99| 久久久亚洲欧洲日产国码αv| 一区二区三区四区av| 国产美女一区二区三区| 欧美精品日韩精品| 亚洲欧美另类图片小说| 精品一二三四区| 欧美男男青年gay1069videost| 国产精品理伦片| 久久精品国产99国产精品| 欧洲人成人精品| 最新日韩av在线| 国产91丝袜在线观看| 精品国内片67194| 日本中文字幕不卡| 欧美日韩第一区日日骚| 亚洲免费av在线| av一区二区三区黑人| 国产欧美一区二区精品久导航| 青青青爽久久午夜综合久久午夜| 91小视频在线| 中文字幕在线不卡一区二区三区| 国产一区二区三区最好精华液 | 色999日韩国产欧美一区二区| 国产亚洲欧美中文| 久久综合综合久久综合| 欧美揉bbbbb揉bbbbb| 亚洲综合男人的天堂| 972aa.com艺术欧美| 亚洲视频精选在线| 99精品欧美一区二区三区综合在线| 久久久精品一品道一区| 国产美女精品一区二区三区| 久久色中文字幕| 国产福利91精品| 久久久www免费人成精品| 狠狠v欧美v日韩v亚洲ⅴ| 精品国产一区二区亚洲人成毛片 | 97se亚洲国产综合自在线不卡 | 久久综合国产精品| 国产裸体歌舞团一区二区| 久久久蜜桃精品|