




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VxWorks應(yīng)用設(shè)計(jì)應(yīng)用設(shè)計(jì)中科信軟培訓(xùn)中心四、四、VxWorks任務(wù)基礎(chǔ)任務(wù)基礎(chǔ)4.1 VxWorks的實(shí)時(shí)多任務(wù)簡(jiǎn)介l實(shí)時(shí)性使得一個(gè)控制系統(tǒng)能夠及時(shí)響應(yīng)對(duì)該系統(tǒng)的控制。l 如果一個(gè)系統(tǒng)的響應(yīng)時(shí)間是可以預(yù)測(cè)的,則它就是一個(gè)具有確定性的系統(tǒng)。l 從一個(gè)事件發(fā)生到它被響應(yīng)之間的時(shí)間稱(chēng)為L(zhǎng)atency。l 確定性響應(yīng)是實(shí)時(shí)系統(tǒng)性能關(guān)鍵因素。4.2 VxWorks的多任務(wù)內(nèi)核lWind內(nèi)核是VxWorks中直接控制任務(wù)的部分。l 根據(jù)VxWorks的調(diào)度機(jī)制為任務(wù)分配CPU。l 使用任務(wù)控制塊(TCB)來(lái)控制任務(wù)。 每個(gè)任務(wù)都有一個(gè)任務(wù)控制塊 TCB的數(shù)據(jù)結(jié)構(gòu)定義WIND_TCB在頭文件taskL
2、ib.h中。 操作系統(tǒng)關(guān)于任務(wù)的控制信息包括,狀態(tài)、任務(wù)優(yōu)先級(jí)、延時(shí)時(shí)間、斷點(diǎn)列表、出錯(cuò)狀態(tài)等。 CPU的上下文信息包括,PC、SP、CPU寄存器等。4.3 VxWorks的任務(wù)狀態(tài)l就緒態(tài):任務(wù)正在等待CPU資源l休眠態(tài):任務(wù)正在等待除CPU資源外的其他資源l延遲態(tài):任務(wù)正在等待一定的時(shí)間延時(shí)l懸置態(tài):任務(wù)無(wú)法執(zhí)行,主要是用于調(diào)試的一種狀態(tài)。4.4 任務(wù)狀態(tài)的轉(zhuǎn)換任務(wù)狀態(tài)的轉(zhuǎn)換狀態(tài)轉(zhuǎn)換函數(shù)就緒態(tài)懸置態(tài)semTake()/msgQReceive()就緒態(tài)延遲態(tài)taskDelay()就緒態(tài)休眠態(tài)taskSuspend()懸置態(tài)就緒態(tài)semGive()/msgQSend()懸置態(tài)休眠態(tài)taskSu
3、spend()延遲態(tài)就緒態(tài)Expired delay延遲態(tài)休眠態(tài)taskSuspend()休眠態(tài)就緒態(tài)taskResume()休眠態(tài)懸置態(tài)taskSuspend()休眠態(tài)延遲態(tài)taskResume()上下文切換l每當(dāng)停止執(zhí)行一個(gè)任務(wù),并有一個(gè)新的任務(wù)開(kāi)始執(zhí)行,就會(huì)發(fā)生上下文的切換。l 為了對(duì)一個(gè)新任務(wù)實(shí)現(xiàn)重新調(diào)度,內(nèi)核必須做如下工作: 將目前正在執(zhí)行的任務(wù)的上下文保存進(jìn)它的TCB中; 將要執(zhí)行的任務(wù)的上下文從它的TCB中恢復(fù)。l上下文切換的速度必須非??焓裁磿r(shí)候會(huì)發(fā)生上下文切換l任務(wù)在執(zhí)行過(guò)程中會(huì)發(fā)生同步上下文切換 任務(wù)自身發(fā)生阻塞、延時(shí)、掛起等狀態(tài)變化 當(dāng)一個(gè)優(yōu)先級(jí)高的任務(wù)準(zhǔn)備運(yùn)行 降低任務(wù)
4、的優(yōu)先級(jí)或任務(wù)退出執(zhí)行(不常發(fā)生)l 當(dāng)有中斷ISR到來(lái)時(shí)會(huì)發(fā)生異步上下文切換 使得一個(gè)優(yōu)先級(jí)高的任務(wù)準(zhǔn)備運(yùn)行 掛起當(dāng)前的任務(wù)或降低它的優(yōu)先級(jí)(不常發(fā)生)l 同步上下文切換比異步上下文切換要保存的寄存器少,因此切換速度快基于優(yōu)先級(jí)的調(diào)度l不同的應(yīng)用應(yīng)該有不同的優(yōu)先級(jí),這一點(diǎn)應(yīng)該在CPU的分配中得到體現(xiàn)。l 搶占調(diào)度是基于任務(wù)的優(yōu)先級(jí),該優(yōu)先級(jí)的選擇反應(yīng)了任務(wù)的重要性。默認(rèn)情況下相同優(yōu)先級(jí)的任務(wù)之間不會(huì)發(fā)生搶占l系統(tǒng)內(nèi)核一旦發(fā)現(xiàn)有一個(gè)優(yōu)先級(jí)比當(dāng)前正在運(yùn)行的任務(wù)的優(yōu)先級(jí)高的任務(wù)處于Ready狀態(tài),內(nèi)核就立即保存當(dāng)前任務(wù)的上下文切換,將當(dāng)前任務(wù)變?yōu)閜ended狀態(tài),并切換到該高優(yōu)先級(jí)任務(wù)的上下文執(zhí)行
5、。l 下列情況在任何時(shí)候會(huì)導(dǎo)致重新調(diào)度。 內(nèi)核調(diào)用(kernel calls) 中斷(例如系統(tǒng)時(shí)鐘中斷)l上下文的切換不會(huì)延遲到下一個(gè)系統(tǒng)時(shí)鐘中斷?;谳嗈D(zhuǎn)的調(diào)度l任務(wù)間平等地占用CPU時(shí)間l輪轉(zhuǎn)調(diào)度機(jī)制使得具有相同優(yōu)先級(jí)地任務(wù)公平地分享CPUl輪轉(zhuǎn)調(diào)度使用時(shí)間片來(lái)實(shí)現(xiàn)相同優(yōu)先級(jí)任務(wù)對(duì)CPU的公平分配。l時(shí)間片設(shè)置 KernelTimeSlice(ticks) (當(dāng)ticks0時(shí),時(shí)間片設(shè)置被關(guān)閉)l 基于優(yōu)先級(jí)的調(diào)度總是優(yōu)先的 基于輪轉(zhuǎn)的調(diào)度僅僅用于具有相同優(yōu)先級(jí)的任務(wù)l 基于優(yōu)先級(jí)的重新調(diào)度可以在任何時(shí)間發(fā)生 基于輪轉(zhuǎn)的調(diào)度要以系統(tǒng)的ticks為間隔4.5 VxWorks中的任務(wù)l一個(gè)Vx
6、Works的任務(wù)包含 一個(gè)堆棧(用于存儲(chǔ)變量和傳送給程序的參數(shù)) 一個(gè)TCB(用于OS控制)l不要混淆可執(zhí)行代碼和執(zhí)行它的任務(wù) 代碼是在任務(wù)啟動(dòng)之前可以被下載的 多個(gè)任務(wù)可以執(zhí)行同樣的代碼(如printf()4.5.1創(chuàng)建一個(gè)任務(wù)l為了創(chuàng)建一個(gè)任務(wù),VxWorks必須 再內(nèi)存池中為任務(wù)分配Stack和TCB的存儲(chǔ)空間。taskSpawn()函數(shù)在一塊連續(xù)的空間分配這些存儲(chǔ)空間。 初始化Stack(例如為任務(wù)創(chuàng)建一個(gè)有初始化值的Stack) 初始化TCB(在TCB中存儲(chǔ)函數(shù)入口點(diǎn)指針,初始化stack指針) 把任務(wù)放到Ready隊(duì)列創(chuàng)建一個(gè)任務(wù)lint taskSpawn( name, prio
7、rity, options, stackSize,entryPt, arg1,arg10)Name 任務(wù)名,如果是NULL系統(tǒng)就給一個(gè)默認(rèn)的名字Priority 任務(wù)優(yōu)先級(jí),值從0255Options 任務(wù)選項(xiàng),如VX_UNBREAKABLEstackSize 所分配的以字節(jié)為單位的堆棧大小entryPt 開(kāi)始執(zhí)行的代碼的地址Arg1arg10 entryPt總共可以有10個(gè)參數(shù)l 如果函數(shù)執(zhí)行成功,則返回任務(wù)標(biāo)識(shí)(id),否則返回錯(cuò)誤號(hào)。l 例如 NewTid=taskSpawn(“tMyTask”,150,0,2000,myRoutine(),arg1,arg2,0,0,0,0,0,0,0
8、,0)任務(wù)標(biāo)識(shí)(task id)l內(nèi)核在任務(wù)創(chuàng)建時(shí)分配給任務(wù)的l 對(duì)每個(gè)任務(wù)是唯一的l 在任務(wù)退出后可以重用l 相關(guān)的taskLib例程 taskIdSelf() 得到調(diào)用任務(wù)的ID號(hào) taskIdListGet() 得到所有正在執(zhí)行任務(wù)的ID號(hào)列表 taskIdVerify() 證實(shí)任務(wù)的ID號(hào)是否有效任務(wù)名l為方便人們理解而設(shè)置 通常在開(kāi)發(fā)過(guò)程中在Shell中使用 在程序中使用task idl 為了方便起見(jiàn),起任務(wù)名時(shí)一般以t作為開(kāi)頭;由系統(tǒng)所起的默認(rèn)的任務(wù)名為t后面帶一個(gè)順序增加的數(shù)字l 任務(wù)名不一定是唯一的(但通常都是唯一的)l 相關(guān)的taskLib例程有 taskName() 從ti
9、d得到任務(wù)名 taskNameToId 從任務(wù)名得到tid任務(wù)優(yōu)先級(jí)l從0(最高)到255(最低)l 程序員可以動(dòng)態(tài)地對(duì)優(yōu)先級(jí)進(jìn)行操作 taskPriorityGet (tid, &priority) taskPrioritySet (tid, priority) 使用這些函數(shù)會(huì)使得程序分析起來(lái)比較困難,不建議使用任務(wù)堆棧(stack)l在任務(wù)被創(chuàng)建時(shí)從系統(tǒng)內(nèi)存池中分配l 任務(wù)創(chuàng)建后堆棧的大小就固定了l 內(nèi)存在堆棧中預(yù)留了一些空間,使得實(shí)際可用的堆??臻g比申請(qǐng)的堆??臻g要小l 超過(guò)堆棧大小(stack crash)會(huì)導(dǎo)致系統(tǒng)不可預(yù)見(jiàn)行為任務(wù)選項(xiàng)(options)l 在任務(wù)創(chuàng)建時(shí),可以按位“與”
10、或者“或”同時(shí)使用 VX_FP_TASK 增加對(duì)浮點(diǎn)的支持 VX_NO_STACK_FILL 不使用0 xee填充stack VX_UNBREKABLE 禁止斷點(diǎn) VX_DEALLOCATE_STACK 當(dāng)任務(wù)退出時(shí)對(duì)stack和TCB進(jìn)行回收l(shuí)使用taskOptionGet()來(lái)查詢(xún)?nèi)蝿?wù)的optionl使用taskOptionSet()來(lái)設(shè)置或復(fù)位option任務(wù)創(chuàng)建過(guò)程中要注意的問(wèn)題l在對(duì)時(shí)間要求非常嚴(yán)格的代碼中,任務(wù)的創(chuàng)建過(guò)程是非常耗時(shí)的l 為了減少創(chuàng)建時(shí)間,在任務(wù)被創(chuàng)建時(shí)可以設(shè)置VX_NO_STACK_FILL選項(xiàng)l 或者在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建任務(wù)然后立即阻塞它,當(dāng)需要時(shí)再重新使得它成為就緒
11、狀態(tài)4.5.2 刪除任務(wù)ltaskDelete(tid)l 刪除一個(gè)給定的任務(wù)l 釋放TCB和stack所占空間資源回收l(shuí)資源回收必須由應(yīng)用程序自己來(lái)實(shí)現(xiàn)l只有TCB和堆棧是自動(dòng)回收的l任務(wù)應(yīng)該在退出之前進(jìn)行資源回收 釋放內(nèi)存 是否被鎖定或共享的資源 關(guān)閉打開(kāi)的文件 當(dāng)父任務(wù)退出時(shí)要?jiǎng)h除子任務(wù)任務(wù)控制(1)任務(wù)重啟 taskRestart(tid)l任務(wù)被中止執(zhí)行,并使用原來(lái)的參數(shù)、tid、和TCB重新啟動(dòng)l通常用于錯(cuò)誤恢復(fù)任務(wù)控制(2)任務(wù)掛起/恢復(fù)(suspend/resume)ltaskSuspend(tid)l 使任務(wù)不能夠執(zhí)行l(wèi) 可以被增加阻塞和睡眠狀態(tài)l 一個(gè)任務(wù)可以安全地掛起自己
12、l taskResume(tid)l 取消掛起l 通常taskSuspend()和taskResume()被用于調(diào)試和開(kāi)發(fā)的目的任務(wù)控制(3)任務(wù)睡眠(delayed)l使任務(wù)睡眠一定的系統(tǒng)時(shí)鐘周期 STATUS taskDelay(ticks)l 每隔1/7秒進(jìn)行輪詢(xún) FOREVER taskDelayed( sysClkRateGet()/7); l 使用sysClkRateSet()改變時(shí)鐘頻率4.5.3 代碼重入(Reentrancy)l代碼重載是指同一段代碼可以被多個(gè)任務(wù)調(diào)用,而且不出錯(cuò)。l 代碼內(nèi)應(yīng)該無(wú)全局變量或靜態(tài)變量;代碼不修改自身。l VxWorks使用下面的機(jī)制來(lái)實(shí)現(xiàn)重入
13、動(dòng)態(tài)堆棧變量 由信號(hào)量保護(hù)的全局或靜態(tài)變量 任務(wù)變量4.5.4 任務(wù)信息(task information) ti(taskNameOrId)l該命令列出下列信息 堆棧信息 任務(wù)選項(xiàng) CPU寄存器4.5.5 任務(wù)錯(cuò)誤狀態(tài)lVxWorks使用一個(gè)全局整型變量errno來(lái)傳遞錯(cuò)誤信息。 低層程序發(fā)現(xiàn)錯(cuò)誤,并設(shè)置errno 調(diào)用程序檢查errno并發(fā)現(xiàn)被調(diào)用程序出現(xiàn)錯(cuò)誤的原因l 代碼中如果要使用errno,則必須包含errno.h文件。設(shè)置errnol低層程序(被調(diào)用的程序)檢測(cè)到一個(gè)錯(cuò)誤設(shè)置errno值,并返回ERROR。STATUS myRoutine()if ( myNum MAX_NUM )errno = S_myLib_TOO_MANY_NUM)return ( ERROR);l 如果在使用C語(yǔ)言標(biāo)準(zhǔn)函數(shù)時(shí)發(fā)生錯(cuò)誤,就直接返回ERROR
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年山東文化產(chǎn)業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年宣城職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年安徽藝術(shù)職業(yè)學(xué)院高職單招語(yǔ)文2019-2024歷年真題考點(diǎn)試卷含答案解析
- 2025年太原幼兒師范高等專(zhuān)科學(xué)校高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年天津藝術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 手動(dòng)操作功能講解
- 新生兒眼護(hù)護(hù)理
- aib知識(shí)培訓(xùn)課件
- 管理信息系統(tǒng)作業(yè)
- 9001基礎(chǔ)知識(shí)課件
- 高速公路工程質(zhì)量管理制度匯編
- 2025年春形勢(shì)與政策第二學(xué)期練習(xí)題、知識(shí)點(diǎn)梳理
- 2025屆浙江省杭州市下學(xué)期高三考前(二模)語(yǔ)文試題試卷含解析
- 北師大版四年級(jí)數(shù)學(xué)下學(xué)期月考質(zhì)量評(píng)估課后輔導(dǎo)過(guò)關(guān)檢測(cè)考試
- 第二單元第1課《葉子的紋理》課件 一年級(jí)美術(shù)下冊(cè) 浙美版
- 2025年洛陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)一套
- 企業(yè)上市居間合同范本
- 2025年河南應(yīng)用技術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案
- 上環(huán)取環(huán)的知識(shí)
- DT帶式輸送機(jī)設(shè)計(jì)手冊(cè)
- 救助站開(kāi)展救助業(yè)務(wù)知識(shí)培訓(xùn)
評(píng)論
0/150
提交評(píng)論