新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > uC/OS-II 學習筆記之:任務刪除

        uC/OS-II 學習筆記之:任務刪除

        作者: 時間:2016-09-12 來源:網絡 收藏

        一、概念:任務的刪除就是把任務由運行態或就緒態置于睡眠態,是任務創建的逆過程。

        本文引用地址:http://www.104case.com/article/201609/303413.htm

        二、操作:具體操作就是把將待刪除的任務的任務控制塊從任務控制鏈表中刪除,并歸還給空任務控制鏈表,

        然后在任務就緒表中把該任務的就緒狀態位置為0,這樣任務就不會再被調度器調用了。

        一般情況,為了安全起見,我們先在某個任務中提出刪除任務的請求,然后再在將待刪除任務中執行刪除操作,

        即由待刪除任務自己刪除自己,而提出刪除任務請求的任務只負責提出請求。這樣的好處是可以讓待刪除任務

        在合適的時候刪除自己,以利于在刪除自身之前釋放掉其占用的資源。

        三、函數

        (1)請求刪除任務函數:OSTaskDelReq(prio)//prio為待刪除任務的優先級別

        (2)提出刪除請求的任務在調用該函數時,具體使用如下:

        //只有當待刪除任務不存在了,就跳出循環

        while (OSTaskDelReq(1) != OS_TASK_NOT_EXIST)

        {

        OSTimeDly(1);//延時一個時鐘節拍

        }

        (3)待刪除任務在調用該函數時,具體使用如下:

        if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ)

        {

        OSTaskDel(OS_PRIO_SELF);//刪除任務自身

        }

        四、典型應用

        //調用刪除任務函數的任務

        //任務1,設優先級別為1

        void TaskLed0(void *pdata)

        {

        while (1)

        {

        LED0 = !LED0;

        OSTimeDlyHMSM(0, 0, 0, 400);

        while (OSTaskDelReq(2) != OS_TASK_NOT_EXIST)

        {

        OSTimeDly(1);//延時一個時鐘節拍

        }

        }

        }

        //被刪除任務

        //任務2,設優先級別為2

        void TaskLed1(void *pdata)

        {

        while (1)

        {

        LED1 = !LED1;

        OSTimeDlyHMSM(0, 0, 0, 400);

        //判斷是否有其它任務發出了刪除自身的請求

        if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ)

        {

        OSTaskDel(OS_PRIO_SELF);//刪除任務自身

        }

        }

        }

        解析:這就是一個在任務1里提出刪除任務2的請求,然后任務2刪除自身的例子。

        參: 任哲 《嵌入式實時操作系統-II原理及應用》

        參: 盧有亮 《嵌入式實時操作系統原理與實踐》



        關鍵詞: uC/OS

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴仁县| 马尔康县| 英山县| 千阳县| 津南区| 东光县| 黄骅市| 昌宁县| 舞阳县| 建湖县| 都江堰市| 新巴尔虎左旗| 东乡县| 怀来县| 濮阳县| 都匀市| 锦屏县| 林周县| 织金县| 崇左市| 太湖县| 临海市| 克什克腾旗| 休宁县| 宜君县| 金阳县| 昆山市| 通渭县| 栾川县| 齐齐哈尔市| 晋江市| 冕宁县| 通辽市| 万安县| 阿勒泰市| 临桂县| 石渠县| 崇信县| 太保市| 利辛县| 余姚市|