新聞中心

        μC/OS-II的任務(wù)管理

        作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        要調(diào)用OSTaskQuery(),如程序清單L4.18中所示的那樣,用戶的應(yīng)用程序必須要為OS_TCB分配存儲空間。這個(gè)OS_TCB與μC/OS-Ⅱ分配的OS_TCB是完全不同的數(shù)據(jù)空間。在調(diào)用了OSTaskQuery()后,這個(gè)OS_TCB包含了對應(yīng)任務(wù)的OS_TCB的副本。用戶必須十分小心地處理OS_TCB中指向其它OS_TCB的指針(即OSTCBNext與OSTCBPrev);用戶不要試圖去改變這些指針! 一般來說, 本函數(shù)只用來了解任務(wù)正在干什么——本函數(shù)是有用的調(diào)試工具。

        程序清單 L4.18 得到任務(wù)的信息

        OS_TCBMyTaskData;

        voidMyTask(void*pdata)

        {

        pdata=pdata;

        for(;;){

        /* 用戶代碼 */

        err=OSTaskQuery(10,MyTaskData);

        /*Examineerrorcode..*/

        /* 用戶代碼 */

        }

        }

        OSTaskQuery()的代碼如程序清單L4.19所示。注意,筆者允許用戶查詢所有的任務(wù),包括空閑任務(wù)[L4.19(1)]。 用戶尤其需要注意的是不要改變OSTCBNext與OSTCBPrev的指向。

        通常,OSTaskQuery()需要檢驗(yàn)用戶是否想知道當(dāng)前任務(wù)的有關(guān)信息[L4.19(2)]以及該任務(wù)是否已經(jīng)建立了[L4.19(3)]。 所有的域是通過賦值語句一次性復(fù)制的而不是一個(gè)域一個(gè)域地復(fù)制的[L4.19(4)]。這樣復(fù)制會(huì)比較快一點(diǎn),因?yàn)榫幾g器大多都能夠產(chǎn)生內(nèi)存拷貝指令。

        程序清單 L4.19 OSTaskQuery().

        INT8UOSTaskQuery(INT8Uprio,OS_TCB*pdata)

        {

        OS_TCB*ptcb;

        if(prio>OS_LOWEST_PRIOprio!=OS_PRIO_SELF){(1)

        return(OS_PRIO_INVALID);

        }

        OS_ENTER_CRITICAL();

        if(prio==OS_PRIO_SELF){(2)

        prio=OSTCBCur->OSTCBPrio;

        }

        if((ptcb=OSTCBPrioTbl[prio])==(OS_TCB*)0){(3)

        OS_EXIT_CRITICAL();

        return(OS_PRIO_ERR);

        }

        *pdata=*ptcb;(4)

        OS_EXIT_CRITICAL();

        return(OS_NO_ERR);

        }


        上一頁 1 2 3 4 5 6 7 8 9 下一頁

        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 宜昌市| 绥化市| 北流市| 和龙市| 鹿邑县| 左云县| 个旧市| 玉山县| 盐池县| 郓城县| 团风县| 庆阳市| 黄大仙区| 卫辉市| 商河县| 东莞市| 江安县| 贵德县| 台湾省| 繁昌县| 浏阳市| 海盐县| 岫岩| 英山县| 邵阳县| 梅河口市| 开封县| 新晃| 十堰市| 凉城县| 万山特区| 丹阳市| 北流市| 通道| 庐江县| 县级市| 革吉县| 镇巴县| 河东区| 陈巴尔虎旗| 石景山区|