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

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

?? functionforucos.txt

?? This the brief for the common function in uCOS system. Valid for elementary user.
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
第一章:OS的主函數
μC/OS /sherlock_lai 發表于2008-01-04, 19:06 
 //"..." 表示未知內容,根據系統不同的需要而定

#include "..."             //包含一些頭文件
#define  TASK_STACK_SIZE ...    //定義堆棧大小
OS_STK Main_Stack[TASK_STACK_SIZE]= {0, };          //定義堆棧
void Main_Task(void *...);                 //定義主任務
#define Main_PRIO       ...
void Main_Task(void *Id)             
{
...
} 

void Main(void)
{
... //系統的一些初始化
 OSInit();  //OS初始化

 //Create the Main Task
 OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[TASK_STACK_SIZE-1],  Main_PRIO); 

//建立主任務
 
 OSStart();  //任務開始
}                              

第二章:OSInit() (初始化函數)
μC/OS /sherlock_lai 發表于2008-01-04, 19:30 
void OSInit (void)
{
    INT16U i;


    OSTime        = 0L;                                   

    OSIntNesting  = 0;                                     
    OSLockNesting = 0;                                   //系統的一些參數清0
#if OS_TASK_CREATE_EN  || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
    OSTaskCtr     = 0;                                     //任務記數器清0
#endif
    OSRunning     = FALSE;                              //操作系統未運行

    OSIdleCtr     = 0L;                                    //空閑任務記數清0

#if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN
    OSIdleCtrRun  = 0L;
    OSIdleCtrMax  = 0L;                                     //系統利用率
    OSStatRdy     = FALSE;                                //統計任務未就緒
#endif
    OSCtxSwCtr    = 0;                                     //任務切換次數清0
    OSRdyGrp      = 0;                                     //就緒任務列表
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
        OSRdyTbl[i] = 0;
    }
                
    OSPrioCur     = 0;                                           //當前任務優先級
    OSPrioHighRdy = 0;                                           //將要運行任務優先級
    OSTCBHighRdy  = (OS_TCB *)0;                                //將要運行任務的控制塊(TCB)
    OSTCBCur      = (OS_TCB *)0;                                  //當前任務控制塊
    OSTCBList     = (OS_TCB *)0;                                      
    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {             
        OSTCBPrioTbl[i] = (OS_TCB *)0;
    }
    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {        

OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
    }
    OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0;   
    OSTCBFreeList                                         = &OSTCBTbl[0];

#if OS_MAX_EVENTS >= 2
    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {           

        OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
    }
    OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
    OSEventFreeList                          = &OSEventTbl[0];    
#endif

#if OS_Q_EN && (OS_MAX_QS >= 2)
    OSQInit();                                             

#endif

#if OS_MEM_EN && OS_MAX_MEM_PART >= 2
    OSMemInit();                                          

#endif    

#if OS_STK_GROWTH == 1
    #if OS_TASK_CREATE_EXT_EN
    OSTaskCreateExt(OSTaskIdle, 
                    (void *)0,                                //建立空閑任務
                    &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], //                 

                    OS_IDLE_PRIO,                              //
                    OS_TASK_IDLE_ID,
                    &OSTaskIdleStk[0],                        //
                    OS_TASK_IDLE_STK_SIZE, 
                    (void *)0,                                 //
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);//
    #else
    OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], OS_IDLE_PRIO);
    #endif
#else
    #if OS_TASK_CREATE_EXT_EN
    OSTaskCreateExt(OSTaskIdle, 
                    (void *)0,                                 //
                    &OSTaskIdleStk[0],                         //
                    OS_IDLE_PRIO,                              //
                    OS_TASK_IDLE_ID,
                    &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], //                    OS_TASK_IDLE_STK_SIZE, 
                    (void *)0,                                 //
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);//
    #else
    OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[0], OS_IDLE_PRIO);
    #endif
#endif

#if OS_TASK_STAT_EN 
    #if OS_TASK_CREATE_EXT_EN
        #if OS_STK_GROWTH == 1
        OSTaskCreateExt(OSTaskStat, 
                        (void *)0,                                //建立統計任務
                        &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], //

                        OS_STAT_PRIO,                             //

                        OS_TASK_STAT_ID,
                        &OSTaskStatStk[0],                        //
                        OS_TASK_STAT_STK_SIZE, 
                        (void *)0,                                //

                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  //
        #else
        OSTaskCreateExt(OSTaskStat, 
                        (void *)0,                                //
                        &OSTaskStatStk[0],                        //
                        OS_STAT_PRIO,                             //
                        OS_TASK_STAT_ID,
                        &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],//
                        OS_TASK_STAT_STK_SIZE, 
                        (void *)0,                                //
                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  //
        #endif
    #else
        #if OS_STK_GROWTH == 1
        OSTaskCreate(OSTaskStat, 
                     (void *)0,                                   //
                     &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   //
                     OS_STAT_PRIO);                               // 

       #else
        OSTaskCreate(OSTaskStat, 
                     (void *)0,                                   //
                     &OSTaskStatStk[0],                           //
                     OS_STAT_PRIO);                               //

        #endif
    #endif
#endif
}

第三章:OSTaskCreate()
μC/OS /sherlock_lai 發表于2008-01-04, 19:43 
這是OS里創建任務的一種函數,另外一種是OSTaskCreateExt,創建擴展的任務.

INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) //這里有4個參數,第一個:要創建的任務函數,第二個:傳遞給任務的指針,第三個:任務堆棧的棧頂個只是,第四個:任務的優先級. 這四個參數是創建普通任務所必須的.  
{
    void   *psp;   
    INT8U   err;


    if (prio > OS_LOWEST_PRIO) {           //任務的優先級必須小于最低任務的優先級,因為OS的任務優先級是從低到高的.

        return (OS_PRIO_INVALID);
    }
    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { //

        OSTCBPrioTbl[prio] = (OS_TCB *)1;    //

        OS_EXIT_CRITICAL();
        psp = (void *)OSTaskStkInit(task, pdata, ptos, 0); //堆棧初始化函數,從這里獲得任務堆棧的物理棧頂 

       err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);    //初始化一個任務控制塊     
        if (err == OS_NO_ERR) {
            OS_ENTER_CRITICAL();
            OSTaskCtr++;                                   //

            OSTaskCreateHook(OSTCBPrioTbl[prio]);          //
            OS_EXIT_CRITICAL();
            if (OSRunning) {                 //如果OS已經運行,則進行一次任務調度
                OSSched();
            }
        } else {
            OS_ENTER_CRITICAL();
            OSTCBPrioTbl[prio] = (OS_TCB *)0;//任務創建失敗,則列表中重新寫為0

            OS_EXIT_CRITICAL();
        }
        return (err);
    } else {
        OS_EXIT_CRITICAL();
        return (OS_PRIO_EXIST);
    }
}

第四章:OSStart()
μC/OS /sherlock_lai 發表于2008-01-04, 20:04 
void OSStart (void)           //任務的開始
{
    INT8U y;
    INT8U x;


    if (OSRunning == FALSE)              //如果操作系統未運行,則進行一次調度,既運行優先級最高的任務
    {
        y             = OSUnMapTbl[OSRdyGrp];        //

        x             = OSUnMapTbl[OSRdyTbl[y]];
        OSPrioHighRdy = (INT8U)((y << 3) + x);
        OSPrioCur     = OSPrioHighRdy;
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];//
        OSTCBCur      = OSTCBHighRdy;
        OSStartHighRdy();                            //開始運行優先級最高的任務,這個函數涉及到CPU寄存器的操作,所以針對具體不同環境會有所不同
    }
}

第五章:任務控制塊 os_tcb
μC/OS /sherlock_lai 發表于2008-01-06, 22:15 
任務控制塊里保存任務的一些參數,只有擁有任務控制塊的任務才有運行的可能,當然運行還需要一些其他條件 
typedef struct os_tcb {
    OS_STK        *OSTCBStkPtr;        //任務堆棧棧頂指針

#if OS_TASK_CREATE_EXT_EN    
    void          *OSTCBExtPtr;        //

    OS_STK        *OSTCBStkBottom;     //棧底指針
    INT32U         OSTCBStkSize;       //堆棧單元數量
    INT16U         OSTCBOpt;           //
    INT16U         OSTCBId;            //
#endif

    struct os_tcb *OSTCBNext;          //下一個任務控制塊

    struct os_tcb *OSTCBPrev;          //上一個任務控制塊,這兩個參數將任務控制塊連成一個雙向鏈表,在時鐘節拍函數OSTimeTick()里會用到

#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
    OS_EVENT      *OSTCBEventPtr;      //

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 欧美日韩你懂得| 国产一区日韩二区欧美三区| 丝袜亚洲另类欧美综合| 日韩精品亚洲专区| 久久99国产精品久久99果冻传媒| 偷拍与自拍一区| 免费观看日韩电影| 国内精品第一页| 成人黄色av网站在线| 成人av动漫在线| 在线精品视频一区二区| 欧美精品一级二级三级| 日韩一区二区在线观看视频| 精品国产乱码久久久久久牛牛| 精品蜜桃在线看| 国产精品伦一区二区三级视频| 中文字幕中文字幕在线一区| 亚洲精品视频在线看| 日韩—二三区免费观看av| 久久精品国产一区二区| 国产99久久久国产精品潘金网站| 99视频一区二区| 91麻豆精品国产91久久久使用方法 | 欧美人与禽zozo性伦| 制服丝袜亚洲色图| 国产午夜精品久久久久久免费视| 亚洲品质自拍视频| 久久99精品久久久久久| 99国产精品久久久| 欧美r级电影在线观看| 亚洲欧美综合色| 亚洲国产va精品久久久不卡综合 | 欧美一区二视频| 国产午夜亚洲精品理论片色戒| 亚洲天堂a在线| 欧美bbbbb| 91久久奴性调教| 久久综合狠狠综合久久综合88| 自拍av一区二区三区| 久久精品久久综合| 91国产丝袜在线播放| 国产欧美一区二区精品忘忧草| 亚洲一级片在线观看| 成人av在线一区二区| 日韩视频免费观看高清完整版 | 国产欧美一区二区在线观看| 亚洲午夜久久久久中文字幕久| 精一区二区三区| 欧美性受xxxx黑人xyx性爽| 26uuu色噜噜精品一区| 亚洲一区二区三区爽爽爽爽爽| 国产在线精品一区二区夜色| 欧美日韩一区不卡| 亚洲啪啪综合av一区二区三区| 国产一区二区免费在线| 欧美二区三区的天堂| 亚洲精品免费视频| 成人蜜臀av电影| 国产午夜精品在线观看| 日韩av二区在线播放| 欧美日韩国产经典色站一区二区三区| 国产精品久久久久久福利一牛影视| 美女脱光内衣内裤视频久久影院| 欧美视频一区在线| 亚洲韩国一区二区三区| 91电影在线观看| 亚洲欧美另类小说| 一本久道久久综合中文字幕| 中文字幕免费不卡| 国产69精品久久久久毛片| 久久久国产精品午夜一区ai换脸| 美腿丝袜亚洲三区| 精品久久久影院| 国产精品自产自拍| 久久久久久夜精品精品免费| 韩国av一区二区三区| 26uuu亚洲综合色欧美| 国产剧情一区二区三区| 2021中文字幕一区亚洲| 国产一区二区三区免费观看| 26uuu精品一区二区在线观看| 狠狠网亚洲精品| 国产亚洲欧美在线| 从欧美一区二区三区| 亚洲视频你懂的| 在线观看视频一区二区 | 日韩区在线观看| 精品亚洲porn| 日本一区二区成人在线| av在线不卡网| 亚洲成人第一页| 精品精品国产高清一毛片一天堂| 久久丁香综合五月国产三级网站| 精品sm捆绑视频| bt7086福利一区国产| 亚洲韩国一区二区三区| 日韩欧美国产午夜精品| 国产成人午夜电影网| 中文字幕在线免费不卡| 欧美色偷偷大香| 激情综合色综合久久综合| 国产精品麻豆一区二区| 欧美蜜桃一区二区三区| 国产一区二区三区四区五区美女| 亚洲欧美在线视频| 91精品久久久久久久99蜜桃 | a级高清视频欧美日韩| 亚洲成人精品影院| 国产欧美日韩麻豆91| 在线视频国内一区二区| 狠狠色狠狠色综合| 亚洲美女屁股眼交3| 日韩精品一区二区三区视频播放 | 日韩欧美国产精品一区| 成人av网在线| 精品亚洲成av人在线观看| 亚洲精品视频在线观看网站| 日韩欧美在线网站| 色婷婷综合久色| 国产aⅴ综合色| 日本中文字幕一区| 亚洲精品你懂的| 国产欧美视频一区二区三区| 91精品在线免费| av激情亚洲男人天堂| 韩国v欧美v日本v亚洲v| 午夜精品福利一区二区蜜股av| 亚洲国产精品黑人久久久| 精品久久久三级丝袜| 欧美日韩成人激情| 在线亚洲免费视频| 一本在线高清不卡dvd| 激情另类小说区图片区视频区| 亚洲成av人片| 一区二区三区在线免费观看| 国产欧美日韩综合精品一区二区| 91精品国产丝袜白色高跟鞋| 日本道精品一区二区三区| 国产 日韩 欧美大片| 国产精品中文字幕日韩精品| 老鸭窝一区二区久久精品| 性欧美疯狂xxxxbbbb| 一区二区三区欧美视频| 亚洲啪啪综合av一区二区三区| 中文字幕欧美国产| 国产精品沙发午睡系列990531| www亚洲一区| 欧美精品一区二区三区在线 | 欧美日韩精品一区二区三区| 97精品国产97久久久久久久久久久久| 国产黄色精品视频| 国产福利91精品一区| 国产成人精品亚洲午夜麻豆| 国产做a爰片久久毛片| 国产在线精品一区在线观看麻豆| 日本不卡在线视频| 久久疯狂做爰流白浆xx| 国产在线一区二区| 成人av手机在线观看| 99久久久久久| 欧美色窝79yyyycom| 欧美精品日韩综合在线| 欧美一区二区三级| 精品国产在天天线2019| 中文字幕免费不卡| 亚洲日本一区二区| 亚洲国产成人porn| 麻豆91精品视频| 国产精品18久久久久久久久| 成人激情动漫在线观看| 91豆麻精品91久久久久久| 欧美一级在线视频| 欧美国产欧美综合| 亚洲综合在线视频| 精品系列免费在线观看| 成人av综合一区| 制服.丝袜.亚洲.另类.中文| 久久精子c满五个校花| 综合色天天鬼久久鬼色| 日韩中文字幕不卡| 成人午夜视频福利| 欧美三区免费完整视频在线观看| 日韩欧美中文一区二区| 中文字幕精品三区| 日韩av中文字幕一区二区| 高清国产一区二区| 欧美精品日韩精品| 国产精品网站在线| 免费在线观看视频一区| 波多野结衣的一区二区三区| 欧美日韩高清在线播放| 久久久精品国产免费观看同学| 亚洲裸体在线观看| 国产一区二区三区av电影 | 欧美大片在线观看一区二区| 中文字幕五月欧美| 国模无码大尺度一区二区三区| 色视频成人在线观看免| 久久精品人人爽人人爽|