




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第六章 任務(wù)管理C/OS-II中的任務(wù)n任務(wù)看起來與任何C函數(shù)一樣,具有一個返回類型和一個參數(shù),只是它從不返回。n任務(wù)的返回類型必須被定義成void型。n任務(wù)可以是一個無限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。任務(wù)代碼并不是被真正的刪除了,而只是C/OS-不再理會該任務(wù)代碼,所以該任務(wù)代碼不會再運行n哪個參數(shù)是任務(wù)的標(biāo)識符? C/OS-II最多能夠管理多少任務(wù)?用戶可以使用多少個任務(wù)?用戶如何使用優(yōu)先級?設(shè)計任務(wù)n例如:采集三個通道的數(shù)據(jù),經(jīng)過A/D轉(zhuǎn)換后使用圖形顯示。n任務(wù)設(shè)計方式1:三通道的數(shù)據(jù)采集和A/D轉(zhuǎn)換繪圖任務(wù)編程任務(wù)有重復(fù),無法通過優(yōu)先級選擇通道n任務(wù)設(shè)計方式2:單通道的數(shù)據(jù)
2、的采集和A/D轉(zhuǎn)換(通道號和數(shù)據(jù)變量作為參數(shù)),在程序中使用不同參數(shù)調(diào)用三次繪圖任務(wù)編程任務(wù)簡單,能夠定義不同通道的優(yōu)先級,任務(wù)調(diào)度需要一定時間任務(wù)管理的內(nèi)容n6.1/6.2 建立任務(wù)n6.3 任務(wù)堆棧n6.4 堆棧檢驗n6.5 刪除任務(wù)n6.6 請求刪除任務(wù)n6.7 改變?nèi)蝿?wù)的優(yōu)先級n6.8 掛起任務(wù)n6.9 恢復(fù)任務(wù)n6.10 獲得有關(guān)任務(wù)的信息建立任務(wù)n通過調(diào)用函數(shù)OSTaskCreate()或者OSTaskCreateExt()建立任務(wù)。OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展版本,使用更多的參數(shù)提供附加功能。n任務(wù)可以在多任務(wù)開始調(diào)度前建立,也可以在其他
3、任務(wù)執(zhí)行過程中建立。n在開始多任務(wù)調(diào)度前,至少要建立一個任務(wù)。n任務(wù)不能通過中斷服務(wù)程序(ISR)建立6.1 OSTaskCreate()nINT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio ) void (*task)(void *pd)/傳遞任務(wù)的地址n任務(wù)的地址是任務(wù)函數(shù)的函數(shù)名void *pdata/任務(wù)中用戶參數(shù)的指針OS_STK *ptos/堆棧的棧頂n必須設(shè)置OS_CPU.H中的OS_STACK_GROWTH通知系統(tǒng)堆棧的類型。ntypedef unsigned int
4、 OS_STK;INT8U prio/任務(wù)的優(yōu)先級ntypedef unsigned char INT8U ; 6.1 OSTaskCreate()nOSTaskCreate(Display_Task,(void *)0, (OS_STK*)&Display_Task_StackSTACKSIZE-1, Display_Task_Prio);/ 20/ 堆棧是一個數(shù)組,長度由STACKSIZE決定n優(yōu)先級定義為206.1 OSTaskCreate()n函數(shù)的功能校驗優(yōu)先級初始化任務(wù)的堆棧初始化任務(wù)控制塊n其他初始化功能6.1 OSTaskCreate()n校驗優(yōu)先級1n判斷優(yōu)先級是否有
5、效if (prio OS_LOWEST_PRIO) return (OS_PRIO_INVALID); 如果任務(wù)的優(yōu)先級大于定義的最低優(yōu)先級,返回錯誤信息:優(yōu)先級無效!prio OS_LOWEST_PRIO63n校驗優(yōu)先級2n判斷此優(yōu)先級任務(wù)是否存在OS_ENTER_CRITICAL(); if (OSTCBPrioTblprio = (OS_TCB *)0) OSTCBPrioTblprio = (OS_TCB *)1;OS_EXIT_CRITICAL();/*其他功能*/ else OS_EXIT_CRITICAL(); return (OS_PRIO_EXIST); 6.1 OSTask
6、Create()n初始化任務(wù)的堆棧nOS_STK_GROWTH 定義為1;堆棧地址由高向低遞減nOS_STK * OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)npsp = (void *)OSTaskStkInit(task, pdata, ptos, 0); npsp;/返回棧頂指針n初始化任務(wù)的寄存器初值SP為ptos,設(shè)置其他寄存器值時SP遞減PC/LR為函數(shù)地址R1-R12為任意設(shè)定的初始值R0用來保存用戶信息pdataCPSR/SPSR設(shè)置為管理模式6.1 OSTaskCre
7、ate()n初始化任務(wù)控制塊nINT8U OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt);nerr = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0); 6.1 OSTaskCreate()n其他初始化功能如果正確的初始化TCB關(guān)中斷OSTASkCtr用于保存任務(wù)數(shù)目創(chuàng)建用戶編寫的鉤子函數(shù)開中斷如果此任務(wù)被其他任務(wù)動態(tài)創(chuàng)建,則進(jìn)行一次調(diào)度,因為任務(wù)創(chuàng)建完畢進(jìn)入就緒狀態(tài)如果存在錯誤關(guān)
8、中斷將此優(yōu)先級任務(wù)清零開中斷創(chuàng)建函數(shù)返回錯誤代碼if (err = OS_NO_ERR) OS_ENTER_CRITICAL(); OSTaskCtr+; OSTaskCreateHook(OSTCBPrioTblprio); OS_EXIT_CRITICAL(); if (OSRunning) OSSched(); else OS_ENTER_CRITICAL(); OSTCBPrioTblprio = (OS_TCB *)0; OS_EXIT_CRITICAL(); return (err);6.2 OSTaskCreateExt()n自學(xué)6.3 任務(wù)堆棧n特點堆棧的每個單元必須是OS_S
9、TK類型。ntypedef unsigned int OS_STK;堆棧由連續(xù)的內(nèi)存空間組成。用戶應(yīng)該在任務(wù)執(zhí)行前分配堆??臻g靜態(tài)分配動態(tài)分配6.3 任務(wù)堆棧n靜態(tài)分配static OS_STK MyTaskStackstack_size;OS_STK MyTaskStackstack_size;n使用全局變量n使用數(shù)組作為堆棧n使用簡單n存在浪費資源的可能n動態(tài)分配OS_STK *pstk;pstk = (OS_STK *)malloc(stack_size);if (pstk != (OS_STK *)0) /* 確認(rèn)malloc()能得到足夠地內(nèi)存空間 */ Create the tas
10、k;n在任務(wù)建立前動態(tài)創(chuàng)建n使用指針的方法n使用靈活n容易出現(xiàn)錯誤6.3 任務(wù)堆棧n內(nèi)存碎片與內(nèi)存泄漏n內(nèi)存碎片:不連續(xù)的內(nèi)存空間n內(nèi)存泄漏:無法使用的空閑的內(nèi)存空間任務(wù)退出,但是動態(tài)分配的內(nèi)存空間卻沒有被釋放6.3 任務(wù)堆棧n堆棧的使用nOS_STK_GROWTH =0堆棧指針遞增SP+SP初值=&MyTaskStack0nOS_STK_GROWTH =1堆棧指針遞增SP-SP初值=&MyTaskStackstack_size-16.3 任務(wù)堆棧OS_STK TaskStackTASK_STACK_SIZE;#if OS_STK_GROWTH = 0 OSTaskCreate
11、(task, pdata, &TaskStack0, prio);#else OSTaskCreate(task, pdata, &TaskStackTASK_STACK_SIZE-1, prio);#endif6.4 堆棧檢驗n通過任務(wù)的運行,判斷任務(wù)實際使用堆??臻g的方法。n在調(diào)試中使用此方法,可以在發(fā)布時減小RAM的浪費。nOSTaskStkChk()函數(shù)服務(wù)實現(xiàn)6.4 堆棧檢驗n堆棧校驗的前提在OS_CFG.H文件中設(shè)OS_TASK_CREATE_EXT為1。用OSTaskCreateExt()建立任務(wù),并給予任務(wù)比實際需要更多的內(nèi)存空間。保證在使用堆棧前對堆棧清零。n
12、在OSTaskCreateExt()中,將參數(shù)opt設(shè)置為OS_TASK_OPT_STK_CHK +OS_TASK_OPT_STK_CLR。n注意如果用戶的程序啟動代碼清除了所有的RAM,并且從未刪除過已建立了的任務(wù),那么用戶就不必設(shè)置選項OS_TASK_OPT_STK_CLR了。這樣就會減少OSTaskCreateExt()的執(zhí)行時間。6.4 堆棧檢驗6.4 堆棧檢驗nINT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata) nprio,任務(wù)的優(yōu)先級。用途?nOS_STK_DATA *pdatapdata指向一個類型為OS_STK_DATA的數(shù)據(jù)
13、結(jié)構(gòu),其中包含如下信息:INT32U OSFree; /* 堆棧中未使用的字節(jié)數(shù)*/ INT32U OSUsed; /* 堆棧中已使用的字節(jié)數(shù) */n返回值:OS_NO_ERR:函數(shù)調(diào)用成功 6.5 刪除任務(wù)n刪除任務(wù):將任務(wù)轉(zhuǎn)換為休眠狀態(tài)。任務(wù)代碼并未被刪除,只是任務(wù)從調(diào)度列表中刪除。任務(wù)的刪除是動態(tài)的。怎么理解?不能刪除空閑任務(wù),不能在ISR中刪除任務(wù)。任務(wù)可以刪除自身。nINT8U OSTaskDel (INT8U prio) 6.6 請求刪除任務(wù)n使用OSTaskDel直接刪除其他任務(wù)的缺點資源丟失例如任務(wù)A刪除任務(wù)B任務(wù)B動態(tài)分配了部分內(nèi)存空間,被刪除時沒有釋放這些空間,引起內(nèi)存泄漏
14、6.6 請求刪除任務(wù)void RequestorTask (void *pdata) INT8U err; pdata = pdata; for (;) /* 應(yīng)用程序代碼應(yīng)用程序代碼 */ if (TaskToBeDeleted() 需要被刪除需要被刪除) while (OSTaskDelReq(TASK_TO_DEL_PRIO) != OS_TASK_NOT_EXIST) OSTimeDly(1); /*應(yīng)用程序代碼應(yīng)用程序代碼*/void TaskToBeDeleted (void *pdata) INT8U err; pdata = pdata; for (;) /*應(yīng)用程序代碼應(yīng)用程
15、序代碼*/ If (OSTaskDelReq(OS_PRIO_SELF) = OS_TASK_DEL_REQ) 釋放所有占用的資源釋放所有占用的資源; 釋放所有動態(tài)內(nèi)存釋放所有動態(tài)內(nèi)存; OSTaskDel(OS_PRIO_SELF); else /*應(yīng)用程序代碼應(yīng)用程序代碼*/ 6.7 改變?nèi)蝿?wù)的優(yōu)先級n任務(wù)優(yōu)先級的靜態(tài)定義。方法?n任務(wù)優(yōu)先級的動態(tài)改變INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio) 可以改變自身任務(wù)或其他任務(wù)的優(yōu)先級不能改變空閑任務(wù)的優(yōu)先級新優(yōu)先級必須有效,而且必須沒有被使用。有效的優(yōu)先級?6.8 掛起任務(wù)n掛起:
16、將一個運行態(tài)的任務(wù)暫時中止n若掛起時,任務(wù)已經(jīng)在就緒態(tài)或正在延時等待進(jìn)入就緒態(tài),那么掛起函數(shù)不起作用nINT8U OSTaskSuspend (INT8U prio) 不能掛起空閑任務(wù)優(yōu)先級有效6.9 恢復(fù)任務(wù)n被掛起的任務(wù)只能被恢復(fù)函數(shù)所恢復(fù)。nINT8U OSTaskResume (INT8U prio) 不能恢復(fù)空閑任務(wù)優(yōu)先級有效,且該優(yōu)先級任務(wù)被掛起恢復(fù)掛起的任務(wù)后,首先要進(jìn)行任務(wù)調(diào)度6.10 獲得有關(guān)任務(wù)的信息n任務(wù)的信息:任務(wù)的任務(wù)控制塊的內(nèi)容nINT8U OSTaskQuery (INT8U prio, OS_TCB *pdata) INT8U prio;任務(wù)的優(yōu)先級OS_TCB
17、 *pdata;保存任務(wù)信息的結(jié)構(gòu)指針第七章 時間管理內(nèi)容n7.1 任務(wù)延時函數(shù)n7.2 按時分秒延時函數(shù)n7.3 讓處在延時期的任務(wù)結(jié)束延時n7.4 系統(tǒng)時間7.1 任務(wù)延時函數(shù)n延時服務(wù)申請該服務(wù)的任務(wù)可以延時一段時間,這段時間的長短是用時鐘節(jié)拍的數(shù)目來確定的。實現(xiàn)這個系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該函數(shù)會使C/OS-進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延時,它就會馬上進(jìn)入就緒狀態(tài)。注意,只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級時,它才
18、會立即運行。 7.1 任務(wù)延時函數(shù)nvoid OSTimeDly (INT16U ticks) ticks 1-655360值代表無延時任務(wù)延時代表,進(jìn)行一次任務(wù)調(diào)度時鐘節(jié)拍=1/OS_TICKS_PER_SEC(參看OS_CFG.H )7.2 按時分秒延時函數(shù)nINT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli) INT8U hoursINT8U minutesINT8U secondsINT16U milli時間的準(zhǔn)確度與時鐘節(jié)拍有關(guān)7.3 讓處在延時期的任務(wù)結(jié)束延時nINT8U OSTimeDlyResume (INT8U prio) 用于結(jié)束任務(wù)延時,將任務(wù)轉(zhuǎn)變?yōu)榫途w態(tài)。會進(jìn)行一次任務(wù)調(diào)度7.4 系統(tǒng)時間n32位計時器用于記錄系統(tǒng)時間n計數(shù)范圍4,294,967,295個時鐘節(jié)拍n若時鐘節(jié)拍為10ms,一次計數(shù)時間497天n從OSStart()調(diào)用開始計數(shù)或者溢出時計數(shù)7.4 系統(tǒng)時間nINT32U OSTimeGet (void) n返回值:計數(shù)器的當(dāng)前值nvoid OSTi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校食堂人員培訓(xùn)規(guī)范與管理指南
- 物流行業(yè)原料采購合同范文
- 整體家居戰(zhàn)略市場規(guī)劃報告
- 小孩改名申請書的家長建議
- 公共交通建設(shè)進(jìn)度管理方案
- 航空制造業(yè)流程控制體系
- 國家自然科學(xué)基金青年科學(xué)基金申請書撰寫技巧
- 交通運輸安全員職責(zé)說明
- 學(xué)校團(tuán)隊建設(shè)的職責(zé)與任務(wù)
- 公共設(shè)施亮化工程的實施與控制措施
- 2024電動牙刷行業(yè)洞察
- 高校教師組織生活發(fā)言稿
- 法學(xué)法律實務(wù)課程設(shè)計
- 【《“一帶一路”背景下我國海外勞工保護(hù)存在的主要問題探析綜述》5300字】
- 《中國服飾史》-沈從文等
- 北京市2023-2024學(xué)年七年級下學(xué)期期中語文試題(含含答案)
- 五年級下英語教案-Lesson 5 What Are They Doing-冀教版
- 2024年高中英語衡水體書法練字字帖
- 工程項目質(zhì)量風(fēng)險源識別及管控措施
- 學(xué)前班語言《貓醫(yī)生過河》課件
- 小學(xué)數(shù)學(xué)學(xué)科現(xiàn)狀分析與對策
評論
0/150
提交評論