中斷和時(shí)鐘機(jī)制ppt課件_第1頁(yè)
中斷和時(shí)鐘機(jī)制ppt課件_第2頁(yè)
中斷和時(shí)鐘機(jī)制ppt課件_第3頁(yè)
中斷和時(shí)鐘機(jī)制ppt課件_第4頁(yè)
中斷和時(shí)鐘機(jī)制ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第八章第八章 C/OS-C/OS-的中斷和時(shí)鐘的中斷和時(shí)鐘 2本章主要內(nèi)容:3C/OS-II系統(tǒng)響應(yīng)中斷的過程系統(tǒng)響應(yīng)中斷的過程系統(tǒng)接收到中斷請(qǐng)求后,如果中斷未關(guān)閉,系統(tǒng)就會(huì)中止正在運(yùn)行的當(dāng)前任務(wù),按照系統(tǒng)接收到中斷請(qǐng)求后,如果中斷未關(guān)閉,系統(tǒng)就會(huì)中止正在運(yùn)行的當(dāng)前任務(wù),按照中斷向量轉(zhuǎn)而去運(yùn)行中斷向量轉(zhuǎn)而去運(yùn)行ISR。當(dāng)當(dāng)ISR運(yùn)行結(jié)束,系統(tǒng)將會(huì)返回到被中止的任務(wù)繼續(xù)或者轉(zhuǎn)向另一個(gè)具有更高優(yōu)先級(jí)運(yùn)行結(jié)束,系統(tǒng)將會(huì)返回到被中止的任務(wù)繼續(xù)或者轉(zhuǎn)向另一個(gè)具有更高優(yōu)先級(jí)別的就緒任務(wù)。別的就緒任務(wù)。4系統(tǒng)中斷系統(tǒng)中斷n中斷就是內(nèi)核控制的任務(wù)在運(yùn)行過程中,應(yīng)內(nèi)部或外部異步事件的請(qǐng)求,中止當(dāng)前任中斷就是內(nèi)

2、核控制的任務(wù)在運(yùn)行過程中,應(yīng)內(nèi)部或外部異步事件的請(qǐng)求,中止當(dāng)前任務(wù)的運(yùn)行,轉(zhuǎn)去處理異步事件所要求的任務(wù)或處理的過程。中斷服務(wù)程序(務(wù)的運(yùn)行,轉(zhuǎn)去處理異步事件所要求的任務(wù)或處理的過程。中斷服務(wù)程序(Interrupt Service Routine)就是應(yīng)中斷請(qǐng)求而運(yùn)行的子程序。簡(jiǎn)稱為)就是應(yīng)中斷請(qǐng)求而運(yùn)行的子程序。簡(jiǎn)稱為ISR。中斷向量指中斷服。中斷向量指中斷服務(wù)子程序務(wù)子程序ISR的入口地址,即起始地址。的入口地址,即起始地址。5中斷請(qǐng)求關(guān)閉中斷轉(zhuǎn)到中斷向量保存CPU寄存器通知內(nèi)核退出ISRISR給任務(wù)發(fā)信號(hào)中斷返回恢復(fù)CPU寄存器中斷響應(yīng)中斷恢復(fù)中斷恢復(fù)任務(wù)響應(yīng)時(shí)間任務(wù)響應(yīng)時(shí)間中斷的響應(yīng)過

3、程無(wú)新高級(jí)任務(wù)則返回原任務(wù)通知內(nèi)核退出ISR恢復(fù)CPU寄存器中斷返回有新高級(jí)任務(wù)則運(yùn)行高級(jí)任務(wù)通知內(nèi)核進(jìn)入ISR6n本章分為內(nèi)核中斷管理及其結(jié)構(gòu),系統(tǒng)時(shí)鐘實(shí)現(xiàn)方法,時(shí)間管理模塊的基本結(jié)構(gòu)與功能,本章分為內(nèi)核中斷管理及其結(jié)構(gòu),系統(tǒng)時(shí)鐘實(shí)現(xiàn)方法,時(shí)間管理模塊的基本結(jié)構(gòu)與功能,基本服務(wù)與接口函數(shù),及其設(shè)計(jì)與調(diào)用方法,相關(guān)應(yīng)用實(shí)例程序分析等?;痉?wù)與接口函數(shù),及其設(shè)計(jì)與調(diào)用方法,相關(guān)應(yīng)用實(shí)例程序分析等。n將將C/OS-II內(nèi)核時(shí)間模塊與中斷與時(shí)鐘管理功能進(jìn)行組合的原因在于,兩個(gè)模塊的功能和內(nèi)核時(shí)間模塊與中斷與時(shí)鐘管理功能進(jìn)行組合的原因在于,兩個(gè)模塊的功能和性能是密切相關(guān)的,中斷管理是時(shí)間管理的基礎(chǔ)。

4、性能是密切相關(guān)的,中斷管理是時(shí)間管理的基礎(chǔ)。7nuC/OS-II內(nèi)核中內(nèi)核中CPU能夠響應(yīng)中斷的條件,可以理解為以下兩個(gè)部分:一是至少有能夠響應(yīng)中斷的條件,可以理解為以下兩個(gè)部分:一是至少有一個(gè)中斷源向一個(gè)中斷源向CPU發(fā)出中斷信號(hào),二是內(nèi)核及應(yīng)用系統(tǒng)允許中斷,即未屏蔽中斷信發(fā)出中斷信號(hào),二是內(nèi)核及應(yīng)用系統(tǒng)允許中斷,即未屏蔽中斷信號(hào)。號(hào)。nC/OS-II內(nèi)核中的時(shí)鐘中斷技術(shù)分為系統(tǒng)中斷與系統(tǒng)時(shí)鐘節(jié)拍兩個(gè)部分組成。內(nèi)核中的時(shí)鐘中斷技術(shù)分為系統(tǒng)中斷與系統(tǒng)時(shí)鐘節(jié)拍兩個(gè)部分組成。 8系統(tǒng)時(shí)鐘節(jié)拍系統(tǒng)時(shí)鐘節(jié)拍 n時(shí)鐘節(jié)拍是特定的周期性中斷,也稱時(shí)鐘中斷,這個(gè)中斷可以看作是系統(tǒng)心臟的脈動(dòng)。時(shí)鐘節(jié)拍是特定的

5、周期性中斷,也稱時(shí)鐘中斷,這個(gè)中斷可以看作是系統(tǒng)心臟的脈動(dòng)。操作系統(tǒng)通過時(shí)鐘中斷來(lái)確定時(shí)間間隔,實(shí)現(xiàn)時(shí)間的延時(shí)及確定任務(wù)超時(shí)。中斷之間操作系統(tǒng)通過時(shí)鐘中斷來(lái)確定時(shí)間間隔,實(shí)現(xiàn)時(shí)間的延時(shí)及確定任務(wù)超時(shí)。中斷之間的時(shí)間間隔取決于不同的應(yīng)用,一般在的時(shí)間間隔取決于不同的應(yīng)用,一般在10200 ms之間。之間。n時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可以將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可以將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事件發(fā)生時(shí)提供等待超時(shí)的依據(jù)。時(shí)鐘節(jié)拍頻率越快,系統(tǒng)額外開銷越大。件發(fā)生時(shí)提供等待超時(shí)的依據(jù)。時(shí)鐘節(jié)拍頻率越快,系統(tǒng)額外開銷越大。n系統(tǒng)定義了系統(tǒng)定

6、義了32位無(wú)符號(hào)整數(shù)位無(wú)符號(hào)整數(shù)OSTime來(lái)記錄系統(tǒng)啟動(dòng)后時(shí)鐘節(jié)拍數(shù)。用戶程序必須在來(lái)記錄系統(tǒng)啟動(dòng)后時(shí)鐘節(jié)拍數(shù)。用戶程序必須在多任務(wù)系統(tǒng)啟動(dòng)以后開啟時(shí)鐘節(jié)拍計(jì)時(shí),在應(yīng)用程序中調(diào)用系統(tǒng)函數(shù)多任務(wù)系統(tǒng)啟動(dòng)以后開啟時(shí)鐘節(jié)拍計(jì)時(shí),在應(yīng)用程序中調(diào)用系統(tǒng)函數(shù)OSStart()之后。()之后。nC/OS-II中的時(shí)鐘節(jié)拍服務(wù)通過在時(shí)鐘節(jié)拍中斷服務(wù)子程序中調(diào)用中的時(shí)鐘節(jié)拍服務(wù)通過在時(shí)鐘節(jié)拍中斷服務(wù)子程序中調(diào)用OSTimeTick()實(shí)()實(shí)現(xiàn)。現(xiàn)。 9C/OS-II與大多數(shù)計(jì)算機(jī)系統(tǒng)一樣,用硬件定時(shí)器產(chǎn)生一個(gè)周期為ms級(jí)的周期性中斷來(lái)實(shí)現(xiàn)系統(tǒng)時(shí)鐘,最小的時(shí)鐘單位就是兩次中斷之間相間隔的時(shí)間,這個(gè)最小時(shí)鐘單位

7、叫做時(shí)鐘節(jié)拍(Time Tick)。硬件定時(shí)器以時(shí)鐘節(jié)拍為周期定時(shí)地產(chǎn)生中斷,該中斷的中斷服務(wù)程序叫做OSTickISR( )。中斷服務(wù)程序通過調(diào)用函數(shù)OSTimeTick( )來(lái)完成系統(tǒng)在每個(gè)時(shí)鐘節(jié)拍時(shí)需要做的工作。10時(shí)鐘節(jié)拍中斷服務(wù)子程序時(shí)鐘節(jié)拍中斷服務(wù)子程序nvoid OSTickISR(void) 保存處理器寄存器的值;調(diào)用OSIntEnter ()或是將OSIntNesting加1;調(diào)用OSTimeTick ();調(diào)用OSIntExit ();恢復(fù)處理器寄存器的值;執(zhí)行中斷返回指令;11OSTimeTick ()函數(shù)()函數(shù)nC/OS-II時(shí)鐘中斷服務(wù)程序的核心是調(diào)用時(shí)鐘中斷服務(wù)程

8、序的核心是調(diào)用OSTimeTick ()函數(shù)。()函數(shù)。OSTimeTick ()函數(shù)用()函數(shù)用來(lái)判斷延時(shí)任務(wù)是否延時(shí)結(jié)束從而將其置于就緒態(tài)。其程序偽代碼如下:來(lái)判斷延時(shí)任務(wù)是否延時(shí)結(jié)束從而將其置于就緒態(tài)。其程序偽代碼如下:void OSTimeTick(void) OSTimeTickHook();();/* 調(diào)用用戶定義的時(shí)鐘節(jié)拍外連函數(shù)調(diào)用用戶定義的時(shí)鐘節(jié)拍外連函數(shù)*/while /*(除空閑任務(wù)外的所有任務(wù)除空閑任務(wù)外的所有任務(wù))*/OS_ENTER_CRITICAL();();/*關(guān)中斷關(guān)中斷*/對(duì)所有任務(wù)的延時(shí)時(shí)間遞減;對(duì)所有任務(wù)的延時(shí)時(shí)間遞減;掃描時(shí)間到期的任務(wù),并且喚醒該任務(wù)

9、;掃描時(shí)間到期的任務(wù),并且喚醒該任務(wù);OS_EXIT_CRITICAL();();/*開中斷開中斷*/指針指向下一個(gè)任務(wù);指針指向下一個(gè)任務(wù); OSTime+;/*系統(tǒng)計(jì)時(shí)時(shí)間加系統(tǒng)計(jì)時(shí)時(shí)間加1*/12nuC/OS-II內(nèi)核對(duì)于以上中斷響應(yīng)及中斷處理過程,使用以下若干系統(tǒng)函數(shù)實(shí)現(xiàn)中斷與內(nèi)核之間的控制管理和聯(lián)系,這些函數(shù)分別是:n中斷的進(jìn)入函數(shù)OSIntEnter()n中斷的退出函數(shù)OSIntExit()n中斷服務(wù)子程序ISRn中斷級(jí)任務(wù)切換函數(shù)ISR的任務(wù)切換函數(shù)OSIntCtxSw( )13void OSIntEnter (void) if (OSRunning = TRUE) if (OS

10、IntNesting 0) OSIntNesting-;/中斷嵌套層數(shù)計(jì)數(shù)器減中斷嵌套層數(shù)計(jì)數(shù)器減1 if (OSIntNesting = 0) & (OSLockNesting = 0)OSIntExitY = OSUnMapTblOSRdyGrp;OSPrioHighRdy = (INT8U)(OSIntExitY OSTCBStkPtr;/SP指向待運(yùn)行任務(wù)堆棧,用出棧指令把用出棧指令把R1,R2,存入存入CPU通用寄存器;通用寄存器;RETI;/中斷返回,PC指待運(yùn)行任務(wù)19參見core.c中關(guān)于中斷進(jìn)入和退出的調(diào)用的定義ncore.c關(guān)于中斷及輔助功能的設(shè)計(jì)與實(shí)現(xiàn)技術(shù)qvoi

11、d OSIntEnter (void)qvoid OSIntExit (void)qvoid OSSchedLock (void)qvoid OSSchedUnlock (void)20C/OS-II的系統(tǒng)時(shí)鐘21void OSTickISR(void)保存保存CPU寄存器;寄存器;調(diào)用調(diào)用OSIntEnter( );/記錄中斷嵌套層數(shù)記錄中斷嵌套層數(shù)if (OSIntNesting = = 1;OSTCBCur-OSTCBStkPtr = SP; /保存堆棧指針保存堆棧指針調(diào)用調(diào)用OSTimeTick( );/節(jié)拍處理節(jié)拍處理清除中斷;清除中斷;開中斷;開中斷;調(diào)用調(diào)用OSIntExit(

12、);/中斷嵌套層數(shù)減中斷嵌套層數(shù)減1 恢復(fù)恢復(fù)CPU寄存器;寄存器;中斷返回;中斷返回; 這是系統(tǒng)時(shí)鐘中斷服務(wù)程序這是系統(tǒng)時(shí)鐘中斷服務(wù)程序22void OSTimeTick (void) OSTimeTickHook( ); OSTime+;/記錄節(jié)拍數(shù)記錄節(jié)拍數(shù) if (OSRunning = = TRUE) ptcb = OSTCBList; while (ptcb-OSTCBPrio != OS_IDLE_PRIO) OS_ENTER_CRITICAL( ); if (ptcb-OSTCBDly != 0) if (-ptcb-OSTCBDly = = 0) /任務(wù)的延時(shí)時(shí)間減一任務(wù)的延

13、時(shí)時(shí)間減一 if (ptcb-OSTCBStat & OS_STAT_SUSPEND) = OS_STAT_RDY) OSRdyGrp |= ptcb-OSTCBBitY; OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; else ptcb-OSTCBDly = 1; ptcb = ptcb-OSTCBNext; OS_EXIT_CRITICAL( ); 時(shí)鐘節(jié)拍服務(wù)函數(shù)時(shí)鐘節(jié)拍服務(wù)函數(shù)23函數(shù)OSTimeTick( )的任務(wù),就是在每個(gè)時(shí)鐘節(jié)拍了解每個(gè)任務(wù)的延時(shí)狀態(tài),使其中已經(jīng)到了延時(shí)時(shí)限的非掛起任務(wù)進(jìn)入就緒狀態(tài)。 24 任務(wù)的延時(shí) 這是系統(tǒng)提供的延時(shí)函

14、數(shù)25嵌入式系統(tǒng)的任務(wù)是一個(gè)無(wú)限循環(huán),C/OS-II是一個(gè)搶占式內(nèi)核,為了使高優(yōu)先級(jí)任務(wù)不獨(dú)占CPU,C/OS-II規(guī)定:除了空閑任務(wù)之外的所有任務(wù)必須在任務(wù)中合適的位置調(diào)用系統(tǒng)提供的函數(shù)OSTimeDly( ),使當(dāng)前任務(wù)的運(yùn)行延時(shí)(暫停)一段時(shí)間并進(jìn)行一次任務(wù)調(diào)度,以讓出CPU的使用權(quán)。 26 其他用來(lái)管理時(shí)間的函數(shù) INT8U OSTimeDlyResume( INT8U prio);INT32U OSTimeGet( void );void OSTimeSet( INT32U ticks ); 取消任務(wù)延時(shí)函數(shù)獲得系統(tǒng)時(shí)間函數(shù)設(shè)置系統(tǒng)時(shí)間函數(shù)27void OSTimeDly (INT1

15、6U ticks)if (ticks 0) OS_ENTER_CRITICAL( );if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX)=0) OSRdyGrp &= OSTCBCur-OSTCBBitY;/取消當(dāng)前任務(wù)的就緒狀態(tài) OSTCBCur-OSTCBDly = ticks;/延時(shí)節(jié)拍數(shù)存入任務(wù)控制塊OS_EXIT_CRITICAL( );OS_Sched( ); /調(diào)用調(diào)度函數(shù) 28OSTimeDlyHMSM()函數(shù)n任務(wù)延遲函數(shù)任務(wù)延遲函數(shù)OSTimeDly()需要確定延時(shí)時(shí)間對(duì)應(yīng)的時(shí)鐘節(jié)拍。利用全局常數(shù)設(shè)定()需要

16、確定延時(shí)時(shí)間對(duì)應(yīng)的時(shí)鐘節(jié)拍。利用全局常數(shù)設(shè)定OS_TICKS_PER_SEC值,將時(shí)間轉(zhuǎn)換成時(shí)鐘節(jié)拍數(shù),參見文件值,將時(shí)間轉(zhuǎn)換成時(shí)鐘節(jié)拍數(shù),參見文件OS_CFG.H。nC/OS-內(nèi)核提供內(nèi)核提供OSTimeDlyHMSM()函數(shù),可以按小時(shí)()函數(shù),可以按小時(shí)(H)、分、分(M)、秒、秒(S)和毫和毫秒秒(ms)來(lái)定義延遲時(shí)間。來(lái)定義延遲時(shí)間。 29結(jié)束任務(wù)延時(shí)函數(shù)結(jié)束任務(wù)延時(shí)函數(shù)OSTimeDlyResume()() n有時(shí)嵌入式軟件根據(jù)設(shè)計(jì)要求,需要根據(jù)特定條件,提前結(jié)束任務(wù)的延時(shí),即任務(wù)的有時(shí)嵌入式軟件根據(jù)設(shè)計(jì)要求,需要根據(jù)特定條件,提前結(jié)束任務(wù)的延時(shí),即任務(wù)的延時(shí)并未到時(shí),就喚醒該任務(wù)

17、,將任務(wù)的狀態(tài)轉(zhuǎn)到就緒。嵌入式操作系統(tǒng)內(nèi)核應(yīng)提供延時(shí)并未到時(shí),就喚醒該任務(wù),將任務(wù)的狀態(tài)轉(zhuǎn)到就緒。嵌入式操作系統(tǒng)內(nèi)核應(yīng)提供這一功能。這一功能。nC/OS-內(nèi)核允許用戶結(jié)束正處于延時(shí)時(shí)限范圍內(nèi)的任務(wù)。延時(shí)任務(wù)可以不等待延時(shí)內(nèi)核允許用戶結(jié)束正處于延時(shí)時(shí)限范圍內(nèi)的任務(wù)。延時(shí)任務(wù)可以不等待延時(shí)時(shí)限到時(shí),而是通過其它任務(wù)調(diào)用結(jié)束任務(wù)延時(shí)函數(shù)時(shí)限到時(shí),而是通過其它任務(wù)調(diào)用結(jié)束任務(wù)延時(shí)函數(shù)OSTimeDlyResume()取消該()取消該任務(wù)的延時(shí),使得延時(shí)任務(wù)延時(shí)結(jié)束,條件許可情況下轉(zhuǎn)到就緒態(tài)。調(diào)用結(jié)束任務(wù)延任務(wù)的延時(shí),使得延時(shí)任務(wù)延時(shí)結(jié)束,條件許可情況下轉(zhuǎn)到就緒態(tài)。調(diào)用結(jié)束任務(wù)延時(shí)函數(shù)時(shí)函數(shù)OSTime

18、DlyResume()需要指定要恢復(fù)的任務(wù)優(yōu)先級(jí)作為調(diào)用參數(shù)。()需要指定要恢復(fù)的任務(wù)優(yōu)先級(jí)作為調(diào)用參數(shù)。 30獲取系統(tǒng)時(shí)間函數(shù)獲取系統(tǒng)時(shí)間函數(shù)OSTimeGet()和設(shè)置系統(tǒng)時(shí)間函數(shù)()和設(shè)置系統(tǒng)時(shí)間函數(shù)OSTimeSet()() n由前面的時(shí)鐘節(jié)拍服務(wù)函數(shù)由前面的時(shí)鐘節(jié)拍服務(wù)函數(shù)OSTimeTick()的內(nèi)部流程可知,無(wú)論時(shí)鐘節(jié)拍何時(shí)發(fā)()的內(nèi)部流程可知,無(wú)論時(shí)鐘節(jié)拍何時(shí)發(fā)生,生,C/OS-內(nèi)核都會(huì)在時(shí)鐘節(jié)拍服務(wù)函數(shù)內(nèi)核都會(huì)在時(shí)鐘節(jié)拍服務(wù)函數(shù)OSTimeTick()中,將一個(gè)()中,將一個(gè)32位的計(jì)數(shù)位的計(jì)數(shù)器器OSTime加加1。n對(duì)于對(duì)于C/OS-內(nèi)核而言,這個(gè)計(jì)數(shù)器是一個(gè)全局量,在用戶調(diào)用內(nèi)核而言,這個(gè)計(jì)數(shù)器是一個(gè)全局量,在用戶調(diào)用OSStart()初始化()初始化多任務(wù)時(shí)清零,并且由于多任務(wù)時(shí)清零,并且由于32位的計(jì)數(shù)器的可表示范圍,該變量在位的計(jì)數(shù)器的可表示范圍,該變量在4,294,967

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論