![嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版章_第1頁(yè)](http://file4.renrendoc.com/view10/M02/21/2C/wKhkGWWl94WAH32rAAJT7PZmT9c669.jpg)
![嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版章_第2頁(yè)](http://file4.renrendoc.com/view10/M02/21/2C/wKhkGWWl94WAH32rAAJT7PZmT9c6692.jpg)
![嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版章_第3頁(yè)](http://file4.renrendoc.com/view10/M02/21/2C/wKhkGWWl94WAH32rAAJT7PZmT9c6693.jpg)
![嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版章_第4頁(yè)](http://file4.renrendoc.com/view10/M02/21/2C/wKhkGWWl94WAH32rAAJT7PZmT9c6694.jpg)
![嵌入式實(shí)時(shí)操作系統(tǒng)ucos ii譯原版章_第5頁(yè)](http://file4.renrendoc.com/view10/M02/21/2C/wKhkGWWl94WAH32rAAJT7PZmT9c6695.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
22實(shí)時(shí)系統(tǒng)概 前后臺(tái)系統(tǒng)(FOREGROUND/BACKGROUND 代碼的臨界 資 共享資 多任 任 任務(wù)切換(CONTEXTSWITCHORTASK 內(nèi)核 調(diào)度 不可剝奪型內(nèi)核(NON-PREEMPTIVE 可剝奪型內(nèi) 可重入性 時(shí)間片輪番調(diào)度 任務(wù)優(yōu)先 靜態(tài)優(yōu)先 動(dòng)態(tài)優(yōu)先 優(yōu)先級(jí)反 任務(wù)優(yōu)先級(jí)分 互斥條 關(guān)中斷和開(kāi)中 測(cè)試并置 禁止,然后允許任務(wù)切 信號(hào)量 死鎖(或抱死)(DEADLOCK(ORDEADLY 同 事件標(biāo)志(EVENT 任務(wù)間的通訊(INTERTASK 消息郵箱(MESSAGEMAIL 消息隊(duì)列(MESSAGE 中 中斷延 中斷響 中斷恢復(fù)時(shí)間(INTERRUPT 中斷延遲、響應(yīng)和恢 中斷處理時(shí) 非屏蔽中斷 時(shí)鐘節(jié)拍(CLOCK I對(duì)存對(duì)存儲(chǔ)器的需 使用實(shí)時(shí)內(nèi)核的優(yōu)缺 實(shí)時(shí)系統(tǒng)小 第2實(shí)時(shí)系第2實(shí)時(shí)系Switch航空航穩(wěn)溫調(diào)過(guò)程控發(fā)動(dòng)機(jī)計(jì)算機(jī)調(diào)制解實(shí)時(shí)應(yīng)用軟件的設(shè)計(jì)一般比非實(shí)時(shí)應(yīng)用軟件設(shè)計(jì)難一些。本章講述實(shí)時(shí)系前后臺(tái)系統(tǒng)(Foreground/Background2.1pL這部分可以看成后臺(tái)行為bgnd)。中斷服務(wù)程序處理異步事件,這部分可以看成前臺(tái)(foregroundlpn)確定的。進(jìn)而,如果程序修改了,循環(huán)的時(shí)序也會(huì)1圖2-1前后臺(tái)ha,所有的事都靠中斷圖2-1前后臺(tái)ha,所有的事都靠中斷服務(wù)來(lái)完成代碼的不允許任何中斷打入。為確保臨界段代碼的執(zhí)行,在進(jìn)入臨界段之前要關(guān)中斷,而臨界段碼執(zhí)行完以后要立即開(kāi)中斷。(參閱2.03共享資源資共享資exclusion多任多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際上是靠CPU(中央處理單元)在許多任務(wù)之間轉(zhuǎn)換、調(diào)度。2多個(gè)。多任務(wù)運(yùn)行使U多個(gè)。多任務(wù)運(yùn)行使U任CPU完全只屬該程CPU如圖2.2所示。圖2.23的任務(wù)是指該任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中。掛起狀態(tài)也可以叫做等待事件態(tài)前的等待,等等。最后,發(fā)生中斷時(shí),CPU提供相應(yīng)的中斷服務(wù),原來(lái)正在運(yùn)行的任務(wù)暫不能運(yùn)行,就進(jìn)入了被中斷狀態(tài)。圖2.3表示μC/OS-Ⅱ中一些函數(shù)提供的服務(wù),這些函數(shù)使任務(wù)從一種狀態(tài)變到另一種狀態(tài)任務(wù)切換(ContextSithorTask內(nèi)容切換。當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài)(Context寄area就是把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開(kāi)始下棧。實(shí)時(shí)內(nèi)核的性能不應(yīng)該以每秒鐘能做多少次任務(wù)切換來(lái)評(píng)價(jià)4內(nèi)核)內(nèi)核)核本身對(duì)CPU用時(shí)間一般25百分點(diǎn)之間單片機(jī)一般不能運(yùn)行實(shí)時(shí)內(nèi)核,因?yàn)閱纹瑱C(jī)的RAM很有限。通過(guò)提供必不可缺少的調(diào)度調(diào)度(Scheduler),英文dispatcher,也是調(diào)度的意思。這是內(nèi)核的主要兩種不同的情況,這要看用的是什么類型的內(nèi)核,是不可剝奪型的還是可剝奪型內(nèi)核不可剝奪型內(nèi)核(Non-Preemptive的使放棄CPU控制權(quán)的企圖。取決于最長(zhǎng)的任務(wù)執(zhí)行時(shí)間示意5中斷來(lái)了,如果此時(shí)中斷是開(kāi)著的中斷來(lái)了,如果此時(shí)中斷是開(kāi)著的,CPU由中斷向量[F2.4(2)]進(jìn)入中斷服務(wù)子程序,中斷程序標(biāo)識(shí)的事件[F2.4(72.4奪型CPU的控制權(quán),完全取決于應(yīng)用程序什么時(shí)候釋放CPU??傊?,不可剝奪型內(nèi)核允許每個(gè)任務(wù)運(yùn)行,直到該任務(wù)自愿放CPU控制2.10可剝奪奪了,或者說(shuō)被掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到CPU的控制權(quán)。如果是中斷服務(wù)6那個(gè)任務(wù)開(kāi)始運(yùn)行。2.5示那個(gè)任務(wù)開(kāi)始運(yùn)行。2.5示2.5剝奪型內(nèi)任務(wù)級(jí)系統(tǒng)響應(yīng)時(shí)間得到了最優(yōu)化,且是可知的。C/OⅡ?qū)儆诳蓜儕Z型內(nèi)核2.11可重入性在寄存予以保護(hù)。程序2.1是一個(gè)可重入型函數(shù)的程序清單2.1可重入型函7voidstrcpy(char*dest,char{while(*dest++=*src++);程序清單不可重入型函程序員打算讓Swap()函數(shù)可以為任何任務(wù)所調(diào)用,如果一個(gè)低優(yōu)先級(jí)的任務(wù)正在執(zhí)行Swap()函數(shù),而此時(shí)中斷發(fā)生了,于是可能發(fā)生的事情2.6所示。[F2.6(1)]表示中斷發(fā)調(diào)用Swap()函數(shù)是Temp賦值為3。這對(duì)該任務(wù)本身來(lái)說(shuō),實(shí)現(xiàn)兩個(gè)變量的交換是沒(méi)有問(wèn)題的,交Z4,X3。然后高優(yōu)先級(jí)的任務(wù)通過(guò)調(diào)用內(nèi)核服務(wù)函數(shù)中的延遲一個(gè)時(shí)鐘節(jié)拍[F2.6(4)],釋放了CPU的使用權(quán),低優(yōu)先級(jí)任務(wù)得以繼續(xù)運(yùn)行[F2.6(5)].注18intvoidswap(int*x,int{Temp=*x=*y=}}*dest=}2.6入性2.6入性萬(wàn)要使用以下技術(shù)之一即可使Swap()函數(shù)具有可重入性把Temp調(diào)用Swp函數(shù)之前關(guān)中斷,調(diào)動(dòng)后再開(kāi)中用信號(hào)量禁止該函數(shù)在使用過(guò)程中被再次調(diào)如果中斷發(fā)生在Swap()函數(shù)調(diào)用之前或調(diào)用之后,兩個(gè)任務(wù)中的X,Y的2.12時(shí)間片輪番調(diào)度(quantum時(shí),把CPU控制權(quán)交給下一個(gè)任務(wù)就緒態(tài)的任務(wù):當(dāng)前任務(wù)已無(wú)事可當(dāng)前任務(wù)在時(shí)間片還沒(méi)結(jié)束時(shí)已經(jīng)完成了目前,μC/OS-Ⅱ不支持時(shí)間片輪番調(diào)度法。應(yīng)用程序中各任務(wù)的優(yōu)先級(jí)必須互不相同92.13任務(wù)優(yōu)每個(gè)任務(wù)都2.13任務(wù)優(yōu)每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)2.14靜態(tài)優(yōu)應(yīng)用程序執(zhí)行過(guò)程中諸任務(wù)優(yōu)先級(jí)不變,則稱之為靜態(tài)優(yōu)先級(jí)。在靜態(tài)優(yōu)先級(jí)系統(tǒng)諸任務(wù)以及它們的時(shí)間約束在程序編譯時(shí)是已知2.15動(dòng)態(tài)優(yōu)免出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題2.16優(yōu)先級(jí)使用實(shí)時(shí)內(nèi)核,優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題是實(shí)時(shí)系統(tǒng)中出現(xiàn)得最多的問(wèn)題。圖2.7釋優(yōu)先級(jí)轉(zhuǎn)是如何出現(xiàn)的。如圖,任務(wù)1優(yōu)先級(jí)高于任務(wù)2,任務(wù)2優(yōu)先級(jí)高于任務(wù)3。任務(wù)1和任使用其共享資源。使用共享資源之前,首先必須得到該資源的信號(hào)量(Semaphore)(見(jiàn)2.2.7(4)]。運(yùn)行過(guò)程中任13直到釋放那個(gè)共享資源的信號(hào)量27(11)]。直到此時(shí),由于實(shí)時(shí)內(nèi)核知道有個(gè)高優(yōu)先級(jí)的在這種1先31等31剝奪CPU2搶走了CPU形中浪費(fèi)了很多CPU時(shí)間。真正需要的是,為防止發(fā)生優(yōu)先級(jí)反轉(zhuǎn),內(nèi)核能自動(dòng)變換任先級(jí),這叫做先級(jí),這叫做優(yōu)先級(jí)繼承(Priorityinheritance)但μC/OS-Ⅱ不支持優(yōu)先級(jí)繼承,一些商內(nèi)核有優(yōu)先級(jí)繼承功能2.7先級(jí)反轉(zhuǎn)申占內(nèi)核恢復(fù)任務(wù)3本來(lái)的優(yōu)先級(jí)并把信號(hào)量交給任務(wù)1,任務(wù)1得以順利運(yùn)行。[圖務(wù)2才能CPU并開(kāi)始2.8(11)]。注意,任22.8(3)]到[圖2.8(10)]的任何一刻都有可能進(jìn)入就緒態(tài),并不影響任1、任3完成過(guò)程。在某種程2.17任務(wù)優(yōu)2.17任務(wù)優(yōu)一項(xiàng)有意思的技術(shù)可稱之為單調(diào)執(zhí)行率調(diào)度法RMS(RateMonotonicScheduling),用于2.92.9基于任務(wù)執(zhí)行頻繁度的優(yōu)先級(jí)分配任務(wù)執(zhí)行頻繁度所有任務(wù)都是周期性任務(wù)間不需要同步,沒(méi)有共享資源,沒(méi)有任務(wù)間數(shù)據(jù)交換等問(wèn)所有任務(wù)都是周期性任務(wù)間不需要同步,沒(méi)有共享資源,沒(méi)有任務(wù)間數(shù)據(jù)交換等問(wèn)等式[2.1]成立,這就是RMS定理∑n(21/ni這里Ei是任務(wù)i最長(zhǎng)執(zhí)行時(shí)間,Ti是任務(wù)i的執(zhí)行周期。換句話說(shuō),Ei/Ti是任務(wù)i務(wù)n(2)0.693。這就意味著,基RMS,要任務(wù)都滿足硬所有有時(shí)間條件要求的任務(wù)i總的CPU利用時(shí)間應(yīng)小于70%!請(qǐng)注意,這是指有時(shí)間100%。使CPU用率100%并不好,因?yàn)槟菢拥脑挸绦蚓蜎](méi)有了修改的余地,也沒(méi)法增加新功能了。作為系統(tǒng)設(shè)計(jì)的一條原則,CPU利用率應(yīng)小于60%到70%。討論了。然而討論優(yōu)先級(jí)分配問(wèn)題,RMS無(wú)疑是一個(gè)有意思的起點(diǎn)表2.1基于任務(wù)到CPU最高允許使用率n21-任務(wù)24.... 利用2.18.1處理共享數(shù)據(jù)時(shí)保證互斥,最簡(jiǎn)便快捷的辦法是關(guān)中斷和開(kāi)中斷。如示意性代碼2.3示關(guān)中斷和開(kāi)中分。實(shí)際上μC/OS-Ⅱ提供兩個(gè)宏調(diào)用,允許用戶在應(yīng)用程序的C代碼中關(guān)中斷然后再開(kāi)中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()[參見(jiàn)8.03.02OS_ENTER_CRITICAL()和OS_EXIT_CRITICALL()],這兩個(gè)宏調(diào)用的使用法見(jiàn)程序程序清2.4利用μC/OS_Ⅱ宏調(diào)用關(guān)中斷和開(kāi)可是,必須十分小心,關(guān)中斷的時(shí)間不能太長(zhǎng)。因?yàn)樗绊懻麄€(gè)系統(tǒng)的中斷響應(yīng)時(shí)voidFunction{. /*在這里處理共享數(shù)據(jù)}Disable /*關(guān)中斷Accesstheresource(read/writefrom/tovariables);/*讀/寫變Reenable /*重新允許中斷如果使用某種實(shí)時(shí)內(nèi)核,一般地說(shuō),關(guān)中斷的最長(zhǎng)時(shí)間不超過(guò)內(nèi)核本身的關(guān)中斷時(shí)2.18.2量,如果該變量是0,允許該任務(wù)與共享資源打交道。為防止另一任務(wù)也要使用該資源者只要簡(jiǎn)單地將全程變量置為1,這通常稱作測(cè)試并置位(Test-And-Set),或稱TAS。操作操作可能是微處理器的單獨(dú)一條不會(huì)被中斷的指令,或者是在程序中關(guān)中斷2.5利用測(cè)試并置位處有的微處理器有硬件的TAS指令(如Motorola68000系列,就有這條指令Disable ifAccessVariableis0 如果資源不可用,標(biāo)志為Setvariableto 置資源不可用,標(biāo)志為Reenable Accessthe 處理Disable SettheAccessVariablebackto 清資源不可使用,標(biāo)志為Reenable 重新else Reenable /*Youdon’thaveaccesstotheresource,trybacklater;/*資源不可使用,以后再試;}顯然與內(nèi)核的初衷相違。應(yīng)該使用下述方法程序清單2.6用給任務(wù)切換上鎖,然后開(kāi)鎖的方法實(shí)現(xiàn)數(shù)據(jù)共享2.18.4信號(hào)量)使兩個(gè)任務(wù)的行為同(譯者注:信號(hào)與信號(hào)量在英文中都叫做Semaphore,并不加以區(qū)分,而說(shuō)它有兩種類制信號(hào)量通常指若干位的組合。而本書中解釋為事件標(biāo)志的置位與清除(見(jiàn)2.21))。25506553504294967295,取決于信號(hào)量規(guī)約機(jī)制使用的是8、voidFunction{. /*Youcanaccessshareddatainhere(interruptsarerecognized)*/./*在這里處理共享數(shù)據(jù)(中斷是開(kāi)著的)這里的中斷是與此函數(shù)部共享數(shù)據(jù)結(jié)}信號(hào)量賦初值,等待信號(hào)量的任務(wù)表(Waitinglist)應(yīng)清為空。等待信號(hào)量任務(wù)中優(yōu)先級(jí)最高的,或者程序清單2.7示意在μC/OS-Ⅱ中如何用信號(hào)量處理共享數(shù)據(jù)。要與同一共享數(shù)據(jù)打道的任務(wù)調(diào)用等待信號(hào)量函數(shù)OSSemPend()。處理完共享數(shù)據(jù)以后再調(diào)用釋放信號(hào)量函數(shù)加中斷延遲時(shí)間,如果中斷服務(wù)程序或當(dāng)前任務(wù)激活了一個(gè)高優(yōu)先級(jí)的任務(wù),高優(yōu)先級(jí)的務(wù)立即開(kāi)始執(zhí)行通過(guò)獲得信號(hào)量處理共享數(shù)voidFunction(void){INT8Uerr;OSSemPend(SharedDataSem,0,&err);. /*Youcanaccessshareddatainhere(interruptsarerecognized)*/./*共享數(shù)據(jù)的處理在此進(jìn)行,(中斷是開(kāi)著的}打印機(jī)送數(shù)據(jù)時(shí)會(huì)出現(xiàn)什么現(xiàn)象。打印機(jī)打印機(jī)送數(shù)據(jù)時(shí)會(huì)出現(xiàn)什么現(xiàn)象。打印機(jī)會(huì)打出相互交叉的兩個(gè)任務(wù)的數(shù)據(jù)。例如任務(wù)1TTasaskk1!2!”在這種情況下,使用信號(hào)量并給信號(hào)量賦初值1(用二進(jìn)制信號(hào)量)。規(guī)則很簡(jiǎn)單送命令給接口另一端的設(shè)備并接收該設(shè)備的回應(yīng)2.11調(diào)用向串行口發(fā)送命令的函數(shù)CommSendCmd(),該函數(shù)有三個(gè)形式參數(shù):Cmd指向送程序清單.隱含的信號(hào)量INT8UCommSendCmd(char*cmd,char*response,INT16U{Acquireport'ssemaphore;Sendcommandtodevice;Waitforresponse(withtimeout);if(timedout){Releasereturn(error是在通訊口驅(qū)動(dòng)程序的初始化部分完成的。第一個(gè)調(diào)CommSendCmd()函數(shù)的任務(wù)申請(qǐng)并得第二個(gè)任務(wù)得到了該信號(hào)量,第二個(gè)任務(wù)才能使用RS-232口在函數(shù)BufReq()向緩沖區(qū)管理方申請(qǐng)得到緩沖區(qū)使用權(quán)。當(dāng)緩沖區(qū)使用權(quán)還不再需要時(shí)過(guò)調(diào)用釋放緩沖區(qū)函數(shù)BufRel()將緩沖區(qū)還給管方。函數(shù)示意碼如程序清單2.9所程序29用信號(hào)量管理緩沖區(qū)BUF{BUFAcquireasemaphore;Disableinterrupts; =}elseReleasesemaphore;return(no}}2.122.12程序在處理鏈表指針時(shí),為滿足互斥條件,中斷是關(guān)掉的(這一操作非常快)。任務(wù)使用完一緩沖區(qū),通過(guò)調(diào)用緩沖區(qū)釋放函數(shù)BufRel()將緩沖區(qū)還給系統(tǒng)。系統(tǒng)先將該緩沖區(qū)指BufFreeList=ptr->BufNext;Enableinterrupts;return}voidBufRel(BUF{Disableptr->BufNext=BufFreeList;BufFreeList=ptr;Enableinterrupts;Release}是浮點(diǎn)數(shù),而相應(yīng)微處理器又沒(méi)有硬件的浮點(diǎn)協(xié)處理器,浮點(diǎn)運(yùn)算的時(shí)間相當(dāng)長(zhǎng),關(guān)中斷間長(zhǎng)了會(huì)影響中斷延遲時(shí)間,這種情況下就有必要使用信號(hào)量2.19死鎖(或抱死Delck(orDaym)死鎖也稱作抱死,指兩個(gè)任務(wù)無(wú)限期地互相等待對(duì)方控制著的資源。設(shè)任務(wù)1資源R2TT12T2都沒(méi)法繼續(xù)執(zhí)行了,發(fā)生了死鎖。最簡(jiǎn)單的防止發(fā)生死鎖的方法是讓每個(gè)任務(wù)釋放資源時(shí)使用相反在嵌入式系統(tǒng)中不易2.20同量初始化0,信號(hào)量用于這種類型同步的稱作單向同步(unilateralrendezvous)。一個(gè)信號(hào),該任務(wù)得到信號(hào)后繼續(xù)往下執(zhí)行2.13用信號(hào)量使任務(wù)與2.13用信號(hào)量使任務(wù)與中斷服務(wù)同發(fā)信號(hào)給等待事件發(fā)生的任務(wù)中優(yōu)先級(jí)最高的任務(wù),或發(fā)信號(hào)給最先開(kāi)始等待事件發(fā)生的那個(gè)任根據(jù)不同的應(yīng)用,發(fā)信號(hào)以標(biāo)識(shí)事件發(fā)生的中斷服務(wù)或任務(wù)也可以是兩個(gè)任務(wù)可以用兩個(gè)信號(hào)量同步它們的行為。如圖2.14所示。這叫做雙向(bilateralrendezvous)。雙向同步同單向同步類似,只是兩個(gè)任務(wù)要相互同步例如則程序清單2.10運(yùn)行到某一處的第一個(gè)任務(wù)發(fā)信號(hào)給第二個(gè)任務(wù)給第一個(gè)任務(wù)[2.10(3)]等待返回信號(hào)[L2.10(4)]。至此,兩個(gè)任務(wù)實(shí)現(xiàn)了互相同步。在務(wù)與中斷服務(wù)之間不能使用雙向同步,因?yàn)樵谥袛喾?wù)中不可能等一個(gè)信號(hào)2.14兩個(gè)任務(wù)用信號(hào)量同步彼此的行程序清單雙向程序清單雙向同步2.21事件標(biāo)志(Eventa2.15{for(;;)PerformSignaltask Waitforsignalfromtask#2; Continueoperation;}}{for(;;)PerformSignaltask Waitforsignalfromtask#1; Continueoperation;}}2.15立型及關(guān)2.15立型及關(guān)聯(lián)型同斷志可以是獨(dú)立型或組合型。μC/OS-Ⅱ目前不支持事件標(biāo)志2.22任務(wù)間的通訊Intsk)況,用戶可以考慮使用郵箱或消息隊(duì)列2.162.23消息郵2.162.23消息郵箱(eageMil邊的數(shù)字表示定時(shí)器設(shè)定值,即任務(wù)最長(zhǎng)可以等多少個(gè)時(shí)鐘節(jié)拍(ClockTicks),關(guān)于時(shí)鐘內(nèi)核一般提供以下郵箱服務(wù)等待有消息進(jìn)入郵箱如果郵箱內(nèi)有消息,就接受如果郵箱內(nèi)有消息,就接受這則消息。如果郵箱里沒(méi)有消息,則任務(wù)并不被掛(ACCEPT),用返回代碼表示調(diào)用結(jié)果,是收到了消息還是沒(méi)有收到消息郵箱也可以當(dāng)作只取兩個(gè)值的信號(hào)量來(lái)用。郵箱里有消息,表示資源可以使用空郵箱表示資源已被其它任務(wù)占2.24消息隊(duì)列esge2.18示意中斷服務(wù)子程序如何將消息放入消息隊(duì)列。圖中兩個(gè)大寫的I消息隊(duì)列,“10100等下去,直至消息的到典型地,內(nèi)核提供的消息隊(duì)列服務(wù)如下等待一則消息的到來(lái)通知調(diào)用者,隊(duì)列中沒(méi)有消息通知調(diào)用者,隊(duì)列中沒(méi)有消息2.25中中斷是一種硬件機(jī)制,用于通知CPU有個(gè)異步事件發(fā)生了。中斷一旦被識(shí)別,CPU在前后臺(tái)系統(tǒng)中,程序回到后臺(tái)程對(duì)不可剝奪型內(nèi)核而言,程序回到被中斷了的任對(duì)可剝奪型內(nèi)核而言,讓進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)開(kāi)始中斷使得CPU可以在事件發(fā)生時(shí)才予以處理,而不必讓微處理器連續(xù)不斷地查詢(Polling)是否有事件發(fā)生。通過(guò)兩條特殊指令:關(guān)中斷(Disableinterrupt)和開(kāi)中斷失。微處理器一般允許中斷嵌套,也就是說(shuō)在中斷服務(wù)期間,微處理器可以識(shí)別另一個(gè)要的中斷,并服務(wù)于那個(gè)更重要的中斷,如圖2.19所示2.262.192.272.192.27護(hù)現(xiàn)場(chǎng),將CPU的各寄存器推入堆棧。這段時(shí)間將被記作中斷響應(yīng)時(shí)間。對(duì)前后臺(tái)系統(tǒng),保存寄存器以后立即執(zhí)行用戶代碼,中斷響應(yīng)時(shí)間由[2.3[2.3]中斷響應(yīng)時(shí)中斷延保存CPU寄存器的時(shí)即得到執(zhí)行。不可剝奪型內(nèi)核的中斷響應(yīng)時(shí)間由表達(dá)式[2.4]給出[2.4]中斷響應(yīng)時(shí)中斷延保存CPU寄存器的時(shí)使得內(nèi)核可以跟蹤中斷的嵌套。對(duì)于μC/OS-Ⅱ說(shuō)來(lái),這個(gè)函數(shù)是OSIntEnter(),可剝型內(nèi)核的中斷響應(yīng)時(shí)間由表達(dá)式[2.5]給出函數(shù)的執(zhí)行時(shí)中斷響應(yīng)是系統(tǒng)函數(shù)的執(zhí)行時(shí)中斷響應(yīng)是系統(tǒng)在最壞情況下的響應(yīng)中斷的時(shí)間,某系100中9950μs內(nèi)響應(yīng)中斷,只有一次響應(yīng)中斷的時(shí)間是250μs,只能認(rèn)為中斷響應(yīng)時(shí)間是250μs2.28中斷恢復(fù)時(shí)間Inerpt內(nèi)存器值的時(shí)間和執(zhí)行中斷返回指令的時(shí)間,如表達(dá)式[2.7]所示個(gè)由實(shí)時(shí)內(nèi)核提供的函數(shù)。在μC/OS-Ⅱ中,這個(gè)函數(shù)叫做OSIntExit(),這個(gè)函數(shù)用于辨務(wù)只有重新成為優(yōu)先級(jí)最高的任務(wù)而進(jìn)入就緒態(tài)時(shí)才能繼續(xù)運(yùn)行。對(duì)于可剝奪型內(nèi)核,中恢復(fù)時(shí)間由表達(dá)式[2.8]給出級(jí)更高任務(wù)的CPU內(nèi)部寄存器的時(shí)間+執(zhí)行中斷返回指令的時(shí)2.29中斷延遲、響應(yīng)和恢[圖2.22B]。在后一種情況下,恢復(fù)中斷的時(shí)間要稍長(zhǎng)一些,因?yàn)閮?nèi)核要做任務(wù)切換。在書中,我做了一張執(zhí)行時(shí)間表,此表多少可以衡量執(zhí)行時(shí)間的不同,假定μC/OS-Ⅱ是33MHZIntel80186微處理器上運(yùn)行的。此表可以使讀者看到做任務(wù)切換的時(shí)間開(kāi)銷。33MHZIntel80186微處理器上運(yùn)行的。此表可以使讀者看到做任務(wù)切換的時(shí)間開(kāi)銷。9.333MHZ80186μC/OS-Ⅱ服務(wù)的執(zhí)行時(shí)間2.30中斷處中斷服務(wù)必須全部小于100μS,500μS1mS。如果中斷服務(wù)是在任何給定的時(shí)間開(kāi)始,以允許優(yōu)先級(jí)更高的中斷打入并優(yōu)先得到2.31非屏蔽中斷)2.31非屏蔽中斷)如斷電時(shí)保存重要的信息。然而,如果應(yīng)用程序沒(méi)有這方面的要求,非屏蔽中斷可用于時(shí)[2.9]中斷延遲時(shí)間=指令執(zhí)行時(shí)間中最長(zhǎng)的始做非屏蔽中斷服務(wù)的時(shí)80125μS之間。所使用的內(nèi)核的關(guān)中斷時(shí)間是45μS??梢钥闯?,如果使用可屏蔽中斷的話,中斷響應(yīng)會(huì)推遲20μS。讀或?qū)懩芡瓿傻?,即不?yīng)該是兩個(gè)分離的字節(jié),要兩次讀或?qū)懖拍芡瓿赏瓿傻淖兞?.23屏蔽中斷的禁使用內(nèi)核服務(wù)給任務(wù)發(fā)信號(hào),但可以使用如2.24制。即用非屏蔽中斷產(chǎn)生的運(yùn)行時(shí)間和信號(hào)量的有效時(shí)間都接近6mS,實(shí)時(shí)性得到了滿足2.32時(shí)鐘節(jié)拍(Cok1負(fù)有關(guān)。以下是這類問(wèn)題可能的解決方案重新安排任務(wù)的時(shí)間要求苛刻的代碼用匯編語(yǔ)言如果可能,用同一家族的更快的微處理器做系統(tǒng)升級(jí)。如從808680186升級(jí)6800068020不管怎么樣,抖動(dòng)總是存在2.33對(duì)存儲(chǔ)核時(shí)的情況則很不一樣。內(nèi)核本身需要額外的代碼空間)。內(nèi)核的大小取決于多種因素1K到100K8位PU務(wù)調(diào)度、任務(wù)切換、信號(hào)量處理、延時(shí)及超時(shí)服務(wù)約需要1K到3K需求量由表達(dá)式[2.12]給出[2.12]總代碼量=應(yīng)用程序代碼+內(nèi)核[2.12]總代碼量=應(yīng)用程序代碼+內(nèi)核計(jì)人員決定分配給每個(gè)任務(wù)多少??臻g時(shí),應(yīng)該盡可能使之接近實(shí)際需求量(有時(shí),這是相所需的棧空間大小可以分別定義(μC/OS-II可以做到)。相反,有些內(nèi)核要求每個(gè)任務(wù)所需等。如果內(nèi)核不支持單獨(dú)的中斷用棧,總的[2.13RAM總需求=應(yīng)用程序的RAM需求任務(wù)棧需求+最大中斷嵌套棧需求*任如果內(nèi)核支持中斷用棧分離,總 需求量由表達(dá)式[2.14]給[2.14]RAM總需求=應(yīng)用程序RAM需求+內(nèi)核數(shù)據(jù)區(qū)RAM需求+各任務(wù)棧需求之總和+最多中斷嵌套之棧需求除非有特別大的程序需要
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版部編歷史七年級(jí)上冊(cè)《第19課 北魏政治和北方民族大交融》聽(tīng)課評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)上冊(cè)1.5《分式方程的應(yīng)用》聽(tīng)評(píng)課記錄2
- 八年級(jí)數(shù)學(xué)下冊(cè)23.3事件的概率1聽(tīng)評(píng)課記錄滬教版五四制
- 人教版地理八年級(jí)下冊(cè)6.3《世界上最大的黃土堆積區(qū)-黃土高原》聽(tīng)課評(píng)課記錄1
- 蘇科版數(shù)學(xué)八年級(jí)上冊(cè)聽(tīng)評(píng)課記錄《5-1物體位置的確定》
- 用功合同范本(2篇)
- 環(huán)境友好原材料采購(gòu)合同(2篇)
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)《第2單元因數(shù)與倍數(shù) 第1課時(shí) 因數(shù)和倍數(shù)(1)》聽(tīng)評(píng)課記錄
- 聽(tīng)評(píng)課記錄2年級(jí)
- 統(tǒng)編教材部編人教版道德與法治九年級(jí)下冊(cè)《3.2 與世界深度互動(dòng)》聽(tīng)課評(píng)課記錄
- 二零二五年度大型自動(dòng)化設(shè)備買賣合同模板2篇
- 2024版金礦居間合同協(xié)議書
- 江西省部分學(xué)校2024-2025學(xué)年高三上學(xué)期1月期末英語(yǔ)試題(含解析無(wú)聽(tīng)力音頻有聽(tīng)力原文)
- GA/T 2145-2024法庭科學(xué)涉火案件物證檢驗(yàn)實(shí)驗(yàn)室建設(shè)技術(shù)規(guī)范
- 2025內(nèi)蒙古匯能煤化工限公司招聘300人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年中國(guó)融通資產(chǎn)管理集團(tuán)限公司春季招聘(511人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 寵物護(hù)理行業(yè)客戶回訪制度構(gòu)建
- 電廠檢修管理
- 《SPIN銷售法課件》課件
- 機(jī)動(dòng)車屬性鑒定申請(qǐng)書
- 2024年中考語(yǔ)文試題分類匯編:非連續(xù)性文本閱讀(學(xué)生版)
評(píng)論
0/150
提交評(píng)論