資源描述:
《任務(wù)管理時(shí)間管理內(nèi)存》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第八講(3)任務(wù)管理時(shí)間管理、內(nèi)存管理授課教師:李英祥電郵地址:drliyingxiang@163.com主要內(nèi)容1.任務(wù)管理2.時(shí)間管理3.內(nèi)存管理2021/8/92www.cuit.edu.cn1.任務(wù)管理建立任務(wù)OSTaskCreate()堆棧檢驗(yàn)OSTaskStkChk()刪除任務(wù)OSTaskDel()請(qǐng)求刪除任務(wù)OSTaskDelReq()改變?nèi)蝿?wù)的優(yōu)先級(jí)OSTaskChangePrio()掛起任務(wù)OSTaskSuspend()恢復(fù)任務(wù)OSTaskResume()獲得有關(guān)任務(wù)的信息OSTa
2、skQuery()2021/8/93www.cuit.edu.cn任務(wù)管理機(jī)制任務(wù)管理用來實(shí)現(xiàn)對(duì)任務(wù)狀態(tài)的直接控制和訪問。內(nèi)核的任務(wù)管理是通過系統(tǒng)調(diào)用來體現(xiàn),主要包括任務(wù)創(chuàng)建、任務(wù)刪除、任務(wù)掛起、任務(wù)喚醒、設(shè)置任務(wù)屬性等內(nèi)容。創(chuàng)建任務(wù)刪除任務(wù)掛起任務(wù)喚醒任務(wù)設(shè)置任務(wù)屬性改變?nèi)蝿?wù)優(yōu)先級(jí)獲取任務(wù)信息…任務(wù)管理功能2021/8/94www.cuit.edu.cn建立任務(wù)OSTaskCreate()OSTaskCreate()需要四個(gè)參數(shù):task是指向任務(wù)代碼的指針;Pdata指向一個(gè)數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)用來在
3、建立任務(wù)時(shí)向任務(wù)傳遞參數(shù);ptos是分配給任務(wù)的堆棧的棧頂指針(任務(wù)堆棧);prio是分配給任務(wù)的優(yōu)先級(jí)2021/8/95www.cuit.edu.cn返回值OSTaskCreate()的返回值為下述之一:OS_NO_ERR:函數(shù)調(diào)用成功。OS_PRIO_EXIST:具有該優(yōu)先級(jí)的任務(wù)已經(jīng)存在。OS_PRIO_INVALID:參數(shù)指定的優(yōu)先級(jí)大于OS_LOWEST_PRIO。OS_NO_MORE_TCB:系統(tǒng)中沒有OS_TCB可以分配給任務(wù)了。2021/8/96www.cuit.edu.cn注意/警告
4、任務(wù)堆棧必須聲明為OS_STK類型。在任務(wù)中必須調(diào)用μC/OS提供的下述過程之一:延時(shí)等待、任務(wù)掛起、等待事件發(fā)生(等待信號(hào)量,消息郵箱、消息隊(duì)列),以使其他任務(wù)得到CPU。用戶程序中不能使用優(yōu)先級(jí)0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。這些優(yōu)先級(jí)μC/OS系統(tǒng)保留,其余的56個(gè)優(yōu)先級(jí)提供給應(yīng)用程序。2021/8/97www.cuit.edu.cn每個(gè)任務(wù)都有自己的堆??臻g。堆棧必須聲明為O
5、S_STK類型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆棧空間(在編譯的時(shí)候分配),靜態(tài)堆棧聲明應(yīng)放置在函數(shù)的外面,這兩種聲明方式如下:2021/8/98www.cuit.edu.cn用戶可以用C編譯器提供的malloc()函數(shù)來動(dòng)態(tài)地分配堆??臻g,如程序清單L4.6所示。在動(dòng)態(tài)分配中,用戶要時(shí)刻注意內(nèi)存碎片問題。2021/8/99www.cuit.edu.cn堆棧檢驗(yàn)OSTaskStkChk()OSTaskStkChk()檢查任務(wù)堆棧狀態(tài),計(jì)算指定任務(wù)堆棧中的未用空間和已用空間;使用OSTask
6、StkChk()函數(shù)要求所檢查的任務(wù)是被OSTaskCreateExt()函數(shù)建立的,且opt參數(shù)中OS_TASK_OPT_STK_CHK操作項(xiàng)打開。參數(shù)prio為指定要獲取堆棧信息的任務(wù)優(yōu)先級(jí),也可以指定參數(shù)OS_PRIO_SELF,獲取調(diào)用任務(wù)本身的信息。pdata指向一個(gè)類型為OS_STK_DATA的數(shù)據(jù)結(jié)構(gòu)2021/8/910www.cuit.edu.cn2021/8/911www.cuit.edu.cn刪除任務(wù)OSTaskDel()OSTaskDel()函數(shù)刪除一個(gè)指定優(yōu)先級(jí)的任務(wù);任務(wù)可以
7、傳遞自己的優(yōu)先級(jí)給OSTaskDel(),從而刪除自身如果任務(wù)不知道自己的優(yōu)先級(jí),還可以傳遞參數(shù)OS_PRIO_SELF被刪除的任務(wù)將回到休眠狀態(tài)。任務(wù)被刪除后可以用函數(shù)OSTaskCreate()或OSTaskCreateExt()重新建立參數(shù)prio為指定要?jiǎng)h除任務(wù)的優(yōu)先級(jí),也可以用參數(shù)OS_PRIO_SELF代替,此時(shí),下一個(gè)優(yōu)先級(jí)最高的就緒任務(wù)將開始運(yùn)行。2021/8/912www.cuit.edu.cn范例2021/8/913www.cuit.edu.cn請(qǐng)求刪除任務(wù)OSTaskDelReq
8、()如果任務(wù)A擁有內(nèi)存緩沖區(qū)或信號(hào)量之類的資源,而任務(wù)B想刪除該任務(wù),這些資源就可能由于沒被釋放而丟失。在這種情況下,用戶可以讓擁有這些資源的任務(wù)在使用完資源后,先釋放資源,再刪除自己。用戶可以通過OSTaskDelReq()函數(shù)來完成該功能。發(fā)出刪除任務(wù)請(qǐng)求的任務(wù)(任務(wù)B)和要?jiǎng)h除的任務(wù)(任務(wù)A)都需要調(diào)用OSTaskDelReq()函數(shù)。例如,假設(shè)任務(wù)5要?jiǎng)h除任務(wù)10,而任務(wù)10占有系統(tǒng)資源,此時(shí)任務(wù)5不能直接調(diào)用OSTaskDel(10)刪除任務(wù)1