嵌入式系統(tǒng)開發(fā)-Chapter7-中斷管理_第1頁
嵌入式系統(tǒng)開發(fā)-Chapter7-中斷管理_第2頁
嵌入式系統(tǒng)開發(fā)-Chapter7-中斷管理_第3頁
嵌入式系統(tǒng)開發(fā)-Chapter7-中斷管理_第4頁
嵌入式系統(tǒng)開發(fā)-Chapter7-中斷管理_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心嵌入式系統(tǒng)開發(fā)嵌入式系統(tǒng)開發(fā)電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心第七章第七章中斷管理中斷管理電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心主要內(nèi)容主要內(nèi)容 中斷的分類中斷的分類 中斷處理的過程中斷處理的過程 實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 用戶中斷服務(wù)程序用戶中斷服務(wù)程序 中斷時(shí)序中斷時(shí)序* *電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 從發(fā)展過程來看:從發(fā)展過程來看: 中斷(中斷(interrupt)最初被用來替換)最初被用來替換I/O操作操作的的輪詢處理輪詢處理方式,以

2、提高方式,以提高I/O處理的效率。處理的效率。 隨后,中斷又包含了隨后,中斷又包含了自陷自陷(trap,也稱為,也稱為內(nèi)內(nèi)部中斷部中斷或是或是軟件中斷軟件中斷)的功能。)的功能。 后來,中斷的概念得到進(jìn)一步擴(kuò)大,被定義后來,中斷的概念得到進(jìn)一步擴(kuò)大,被定義為為導(dǎo)致程序正常執(zhí)行流程發(fā)生改變的事件導(dǎo)致程序正常執(zhí)行流程發(fā)生改變的事件(不包括程序的分支情況)??砂迅拍畋粩U(kuò)(不包括程序的分支情況)??砂迅拍畋粩U(kuò)大的中斷稱為大的中斷稱為廣義中斷廣義中斷。概述概述 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 在實(shí)際應(yīng)用中,廣義的中斷通常被分為中斷、在實(shí)際應(yīng)用中,廣義的中斷通常被分為中斷、自

3、陷和異常(自陷和異常(exceptionexception)等類別。)等類別。 中斷是由于中斷是由于CPU外部的原因而改變程序執(zhí)外部的原因而改變程序執(zhí)行流程的過程,屬于行流程的過程,屬于異步事件異步事件,又稱為,又稱為硬硬件中斷件中斷。自陷和異常則為。自陷和異常則為同步事件同步事件; 自陷表示通過處理器所擁有的自陷表示通過處理器所擁有的軟件指令軟件指令、可預(yù)期地使處理器正在執(zhí)行的程序的執(zhí)行可預(yù)期地使處理器正在執(zhí)行的程序的執(zhí)行流程發(fā)生變化,以執(zhí)行特定的程序。自陷流程發(fā)生變化,以執(zhí)行特定的程序。自陷是是顯式的事件顯式的事件,需要無條件地執(zhí)行;,需要無條件地執(zhí)行; Motorola 68000系列中

4、的系列中的Trap指令指令 ARM中的中的SWI指令指令 Intel 80 x86中的中的INT指令指令 概述概述 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心異常為異常為CPU自動(dòng)產(chǎn)生的自陷,以處理自動(dòng)產(chǎn)生的自陷,以處理異常事件。異常事件。 如被如被0除、執(zhí)行非法指令和內(nèi)存保護(hù)故障除、執(zhí)行非法指令和內(nèi)存保護(hù)故障等。等。 異常沒有對應(yīng)的處理器指令異常沒有對應(yīng)的處理器指令,當(dāng)異常事,當(dāng)異常事件發(fā)生時(shí),處理器也需要無條件地掛起件發(fā)生時(shí),處理器也需要無條件地掛起當(dāng)前運(yùn)行的程序,執(zhí)行特定的處理程序。當(dāng)前運(yùn)行的程序,執(zhí)行特定的處理程序。 概述概述 電子科技大學(xué)嵌入式軟件工程中心電子科技大

5、學(xué)嵌入式軟件工程中心中斷的分類中斷的分類 分類方式分類方式 硬件中斷是否可以被屏蔽:硬件中斷是否可以被屏蔽: 可屏蔽中斷可屏蔽中斷和和不可屏蔽中斷不可屏蔽中斷 中斷源:中斷源: 硬件中斷硬件中斷和和軟件中斷軟件中斷 中斷信號的產(chǎn)生:中斷信號的產(chǎn)生: 邊緣觸發(fā)中斷邊緣觸發(fā)中斷和和電平觸發(fā)中斷電平觸發(fā)中斷 中斷服務(wù)程序的調(diào)用方式:中斷服務(wù)程序的調(diào)用方式: 向量中斷向量中斷、直接中斷直接中斷和和間接中斷間接中斷 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心可屏蔽中斷和不可屏蔽中斷可屏蔽中斷和不可屏蔽中斷 由于中斷的發(fā)生是異步的,程序的正常執(zhí)行流程隨時(shí)由于中斷的發(fā)生是異步的,程序的正常

6、執(zhí)行流程隨時(shí)有可能被中斷服務(wù)程序打斷。如果程序正在進(jìn)行某些有可能被中斷服務(wù)程序打斷。如果程序正在進(jìn)行某些重要運(yùn)算,中斷服務(wù)程序的插入將有可能改變某些寄重要運(yùn)算,中斷服務(wù)程序的插入將有可能改變某些寄存器的數(shù)據(jù),造成程序的運(yùn)行發(fā)生錯(cuò)誤。存器的數(shù)據(jù),造成程序的運(yùn)行發(fā)生錯(cuò)誤。 可屏蔽中斷可屏蔽中斷:能夠被屏蔽掉的中斷。:能夠被屏蔽掉的中斷。 外部設(shè)備的中斷請求信號一般需要先通過外部設(shè)備的中斷請求信號一般需要先通過CPU外部的中斷控外部的中斷控制器,再與制器,再與CPU相應(yīng)的引腳相連。相應(yīng)的引腳相連。 可編程中斷控制器可以通過軟件進(jìn)行控制,以禁止或是允許可編程中斷控制器可以通過軟件進(jìn)行控制,以禁止或是允

7、許中斷。中斷。 不可屏蔽中斷不可屏蔽中斷:在任何時(shí)候都不可屏蔽的。:在任何時(shí)候都不可屏蔽的。 一個(gè)比較典型的例子是掉電中斷,當(dāng)發(fā)生掉電時(shí),無論程序一個(gè)比較典型的例子是掉電中斷,當(dāng)發(fā)生掉電時(shí),無論程序正在進(jìn)行什么樣的運(yùn)算,它都肯定無法正常運(yùn)行下去。這種正在進(jìn)行什么樣的運(yùn)算,它都肯定無法正常運(yùn)行下去。這種情況下,急需進(jìn)行的是一些掉電保護(hù)的操作。對這類中斷,情況下,急需進(jìn)行的是一些掉電保護(hù)的操作。對這類中斷,應(yīng)隨時(shí)進(jìn)行響應(yīng)。應(yīng)隨時(shí)進(jìn)行響應(yīng)。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心硬件中斷和軟件中斷硬件中斷和軟件中斷 硬件中斷:由于硬件中斷:由于CPUCPU外部的設(shè)備所產(chǎn)生的中斷

8、。外部的設(shè)備所產(chǎn)生的中斷。異步事件異步事件:可能在程序執(zhí)行的任何位置發(fā):可能在程序執(zhí)行的任何位置發(fā)生,發(fā)生中斷的時(shí)間通常是不確定的。生,發(fā)生中斷的時(shí)間通常是不確定的。 軟件中斷:同步中斷或是自陷,通過處理器的軟件中斷:同步中斷或是自陷,通過處理器的軟件指令來實(shí)現(xiàn)。軟件指令來實(shí)現(xiàn)。產(chǎn)生中斷的時(shí)機(jī)是預(yù)知的,可根據(jù)需要在產(chǎn)生中斷的時(shí)機(jī)是預(yù)知的,可根據(jù)需要在程序中進(jìn)行設(shè)定。程序中進(jìn)行設(shè)定。軟件中斷的處理程序以軟件中斷的處理程序以同步的方式同步的方式進(jìn)行執(zhí)進(jìn)行執(zhí)行。行。其處理方式同硬件中斷處理程序類似。其處理方式同硬件中斷處理程序類似。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心硬件中

9、斷和軟件中斷硬件中斷和軟件中斷 軟件中斷是一種非常重要的機(jī)制:軟件中斷是一種非常重要的機(jī)制:系統(tǒng)可通過該機(jī)制在系統(tǒng)可通過該機(jī)制在用戶模式執(zhí)行特權(quán)模用戶模式執(zhí)行特權(quán)模式式下的操作。下的操作。是是軟件調(diào)試軟件調(diào)試的一個(gè)重要手段,如的一個(gè)重要手段,如Intel Intel 80 x8680 x86中的中的INT 3INT 3,使指令進(jìn)行單步執(zhí)行,調(diào),使指令進(jìn)行單步執(zhí)行,調(diào)試器可以用它來形成觀察點(diǎn),并查看隨程序試器可以用它來形成觀察點(diǎn),并查看隨程序執(zhí)行而動(dòng)態(tài)變化的事件情況。執(zhí)行而動(dòng)態(tài)變化的事件情況。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心邊緣觸發(fā)中斷和電平觸發(fā)中斷邊緣觸發(fā)中斷和電

10、平觸發(fā)中斷 邊緣觸發(fā)中斷:中斷線邊緣觸發(fā)中斷:中斷線從低變到高從低變到高或是或是從高變到從高變到低低時(shí),中斷信號就被發(fā)送出去,并只有在下一次時(shí),中斷信號就被發(fā)送出去,并只有在下一次的從低變到高或是從高變到低時(shí)才會(huì)再度觸發(fā)中的從低變到高或是從高變到低時(shí)才會(huì)再度觸發(fā)中斷。斷。事件發(fā)生的時(shí)間非常短,有可能出現(xiàn)中斷控制器丟失事件發(fā)生的時(shí)間非常短,有可能出現(xiàn)中斷控制器丟失中斷的情況。中斷的情況。如果多個(gè)設(shè)備連接到同一個(gè)中斷線,即使只有一個(gè)設(shè)如果多個(gè)設(shè)備連接到同一個(gè)中斷線,即使只有一個(gè)設(shè)備產(chǎn)生了中斷信號,也必須調(diào)用中斷線對應(yīng)的所有中備產(chǎn)生了中斷信號,也必須調(diào)用中斷線對應(yīng)的所有中斷服務(wù)程序來進(jìn)行匹配,否則會(huì)

11、出現(xiàn)中斷的軟件丟失斷服務(wù)程序來進(jìn)行匹配,否則會(huì)出現(xiàn)中斷的軟件丟失情況。情況。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心邊緣觸發(fā)中斷和電平觸發(fā)中斷邊緣觸發(fā)中斷和電平觸發(fā)中斷 電平觸發(fā)中斷:在硬件中斷線的電平觸發(fā)中斷:在硬件中斷線的電平發(fā)生變化電平發(fā)生變化時(shí)產(chǎn)生中斷信號,并且中斷信號的有效性將持時(shí)產(chǎn)生中斷信號,并且中斷信號的有效性將持續(xù)保持下去,直到中斷信號被清除。續(xù)保持下去,直到中斷信號被清除。能夠降低中斷信號能夠降低中斷信號傳送丟失傳送丟失的情況的情況能通過更有效的方式來服務(wù)中斷,每個(gè)為該中斷服能通過更有效的方式來服務(wù)中斷,每個(gè)為該中斷服務(wù)后的務(wù)后的ISRISR都要向外圍設(shè)

12、備進(jìn)行確認(rèn),然后取消該設(shè)都要向外圍設(shè)備進(jìn)行確認(rèn),然后取消該設(shè)備對中斷線的操作。備對中斷線的操作。當(dāng)中斷線的最后一個(gè)設(shè)備得到中斷服務(wù)后,中斷線當(dāng)中斷線的最后一個(gè)設(shè)備得到中斷服務(wù)后,中斷線的電平就會(huì)發(fā)生變化,不用對連接到同一個(gè)硬件中的電平就會(huì)發(fā)生變化,不用對連接到同一個(gè)硬件中斷線的所有中斷服務(wù)程序進(jìn)行嘗試。斷線的所有中斷服務(wù)程序進(jìn)行嘗試。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心向量中斷、直接中斷和間接中斷向量中斷、直接中斷和間接中斷 向量中斷:通過向量中斷:通過中斷向量中斷向量來調(diào)用中斷服務(wù)來調(diào)用中斷服務(wù)程序。程序。 直接中斷:中斷對應(yīng)的中斷服務(wù)程序的直接中斷:中斷對應(yīng)的中斷

13、服務(wù)程序的入入口地址口地址是一個(gè)固定值,當(dāng)中斷發(fā)生的時(shí)候,是一個(gè)固定值,當(dāng)中斷發(fā)生的時(shí)候,程序執(zhí)行流程將直接跳轉(zhuǎn)到中斷服務(wù)程序程序執(zhí)行流程將直接跳轉(zhuǎn)到中斷服務(wù)程序的入口地址,執(zhí)行中斷服務(wù)程序。的入口地址,執(zhí)行中斷服務(wù)程序。 間接中斷:中斷服務(wù)程序的入口地址由間接中斷:中斷服務(wù)程序的入口地址由寄寄存器存器提供。提供。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心向量中斷向量中斷 中斷硬件設(shè)備的硬件中斷線(也稱為中中斷硬件設(shè)備的硬件中斷線(也稱為中斷請求斷請求IRQIRQ)被中斷控制器匯集成)被中斷控制器匯集成中斷向中斷向量量(interrupt vectorinterrupt v

14、ector);); 每個(gè)中斷向量對應(yīng)一個(gè)中斷服務(wù)程序每個(gè)中斷向量對應(yīng)一個(gè)中斷服務(wù)程序(interrupt service routineinterrupt service routine,ISRISR),),用來存放用來存放中斷服務(wù)程序的入口地址中斷服務(wù)程序的入口地址或是或是中斷服務(wù)程序的第一條指令中斷服務(wù)程序的第一條指令。 系統(tǒng)中通常包含多個(gè)中斷向量,存放這系統(tǒng)中通常包含多個(gè)中斷向量,存放這些中斷向量對應(yīng)中斷服務(wù)程序入口地址些中斷向量對應(yīng)中斷服務(wù)程序入口地址的內(nèi)存區(qū)域被稱為的內(nèi)存區(qū)域被稱為中斷向量表中斷向量表。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心向量中斷向量中斷 在

15、在Intel 80 x86Intel 80 x86處理器中,中斷向量表包含處理器中,中斷向量表包含256256個(gè)入口,每個(gè)中斷向量需要四個(gè)字節(jié)個(gè)入口,每個(gè)中斷向量需要四個(gè)字節(jié)(存放中斷服務(wù)程序的首址)。(存放中斷服務(wù)程序的首址)。 ARMARM的中斷向量表開始于內(nèi)存地址的中斷向量表開始于內(nèi)存地址0 x000000000 x00000000或是或是0 xFFFF00000 xFFFF0000處。處。電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷控制器中斷控制器 對多個(gè)可屏蔽中斷源進(jìn)行管理對多個(gè)可屏蔽中斷源進(jìn)行管理,使,使CPUCPU核心核心能和更多的中斷資源相聯(lián)系。能和更多的中

16、斷資源相聯(lián)系。 能夠?qū)χ袛噙M(jìn)行排隊(duì)能夠?qū)χ袛噙M(jìn)行排隊(duì):避免中斷信號的丟失避免中斷信號的丟失對不同的中斷進(jìn)行優(yōu)先級配置,使高優(yōu)先級中對不同的中斷進(jìn)行優(yōu)先級配置,使高優(yōu)先級中斷能夠中斷低優(yōu)先級中斷,滿足系統(tǒng)中具有更斷能夠中斷低優(yōu)先級中斷,滿足系統(tǒng)中具有更高時(shí)間約束特性功能的需要高時(shí)間約束特性功能的需要電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷控制器中斷控制器IR3 IR4 IR0 實(shí)時(shí)鐘實(shí)時(shí)鐘IR1 IR2 保留保留IR5 協(xié)處理器協(xié)處理器IR6 硬盤硬盤IR7 保留保留80X86IR3 COM2IR0 定時(shí)器定時(shí)器IR1 鍵盤鍵盤IR2 INTIR4 COM1IR5 并口并

17、口2IR6 軟盤軟盤IR7 并口并口1主主8259+5V從從8259INTRINT /INTA/INTANMI在基于在基于x86的架構(gòu)中,的架構(gòu)中,8259是一個(gè)非常通用的中斷控制器芯片(稱為是一個(gè)非常通用的中斷控制器芯片(稱為PIC,programmable interrupt controller)。)。每個(gè)每個(gè)PIC只能夠處理只能夠處理8個(gè)中斷,為支持更多數(shù)量的中斷,需要組織成菊花鏈個(gè)中斷,為支持更多數(shù)量的中斷,需要組織成菊花鏈(daisy chain)的方式,把一個(gè))的方式,把一個(gè)PIC的輸出連接到另一個(gè)的輸出連接到另一個(gè)PIC的輸入上。的輸入上。 電子科技大學(xué)嵌入式軟件工程中心電子科

18、技大學(xué)嵌入式軟件工程中心中斷處理的過程中斷處理的過程 中斷處理的過程分為:中斷處理的過程分為:中斷檢測中斷檢測中斷響應(yīng)中斷響應(yīng)中斷處理中斷處理 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷檢測中斷檢測 中斷檢測在中斷檢測在每條指令結(jié)束時(shí)每條指令結(jié)束時(shí)進(jìn)行,檢測是進(jìn)行,檢測是否有中斷請求或是否滿足異常條件。否有中斷請求或是否滿足異常條件。為滿足中斷處理的需要,在指令周期中使用了為滿足中斷處理的需要,在指令周期中使用了中斷周期中斷周期。在中斷周期中,處理器檢查是否有中斷發(fā)生,在中斷周期中,處理器檢查是否有中斷發(fā)生,即是否出現(xiàn)中斷信號。即是否出現(xiàn)中斷信號。 沒有中斷信號:處理器繼

19、續(xù)運(yùn)行,并通過取指周期沒有中斷信號:處理器繼續(xù)運(yùn)行,并通過取指周期取當(dāng)前程序的下一條指令;取當(dāng)前程序的下一條指令; 有中斷信號:將進(jìn)入中斷響應(yīng),對中斷進(jìn)行處理。有中斷信號:將進(jìn)入中斷響應(yīng),對中斷進(jìn)行處理。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心取指令取指令執(zhí)行指令執(zhí)行指令檢查中斷檢查中斷處理中斷處理中斷開始開始停止停止取周期取周期執(zhí)行周期執(zhí)行周期中斷周期中斷周期允許中斷允許中斷中斷和指令周期中斷和指令周期 不允許不允許中斷中斷電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷響應(yīng)中斷響應(yīng) 中斷響應(yīng)是由中斷響應(yīng)是由處理器內(nèi)部硬件處理器內(nèi)部硬件完成的中斷序列,完

20、成的中斷序列,而不是由程序執(zhí)行的。而不是由程序執(zhí)行的。 在在Intel 80 x86Intel 80 x86中,中斷響應(yīng)過程的操作如下:中,中斷響應(yīng)過程的操作如下:對可屏蔽中斷,從對可屏蔽中斷,從82598259中斷控制器芯片讀取中斷向量中斷控制器芯片讀取中斷向量號;號;將標(biāo)志寄存器將標(biāo)志寄存器EFLAGEFLAG、CSCS和和IPIP壓棧;壓棧;對于硬件中斷,復(fù)位標(biāo)志寄存器中的對于硬件中斷,復(fù)位標(biāo)志寄存器中的IFIF和和TFTF位,禁止位,禁止可屏蔽外部中斷和單步異常;可屏蔽外部中斷和單步異常;根據(jù)中斷向量號,查找中斷向量表,根據(jù)中斷服務(wù)程根據(jù)中斷向量號,查找中斷向量表,根據(jù)中斷服務(wù)程序的首

21、址轉(zhuǎn)移到中斷服務(wù)程序執(zhí)行。序的首址轉(zhuǎn)移到中斷服務(wù)程序執(zhí)行。電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷處理中斷處理 中斷處理:執(zhí)行中斷服務(wù)程序。中斷處理:執(zhí)行中斷服務(wù)程序。中斷服務(wù)程序用來處理自陷、異?;蚴侵袛?。中斷服務(wù)程序用來處理自陷、異常或是中斷。盡管導(dǎo)致自陷、異常和中斷的事件不同,但大盡管導(dǎo)致自陷、異常和中斷的事件不同,但大都具有相同的中斷服務(wù)程序結(jié)構(gòu)。都具有相同的中斷服務(wù)程序結(jié)構(gòu)。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷處理中斷處理 中斷服務(wù)程序的主要內(nèi)容:中斷服務(wù)程序的主要內(nèi)容: 保存上下文:保存中斷服務(wù)程序?qū)⒁褂玫谋4嫔舷挛模罕4嬷袛?/p>

22、服務(wù)程序?qū)⒁褂玫乃屑拇嫠屑拇嫫鞯膬?nèi)容器的內(nèi)容,以便于在退出中斷服務(wù)程序之前進(jìn)行恢復(fù);,以便于在退出中斷服務(wù)程序之前進(jìn)行恢復(fù);如果中斷向量被多個(gè)設(shè)備所共享,為了確定產(chǎn)生該中如果中斷向量被多個(gè)設(shè)備所共享,為了確定產(chǎn)生該中斷信號的設(shè)備,需要斷信號的設(shè)備,需要輪詢輪詢這些設(shè)備的中斷狀態(tài)寄存器;這些設(shè)備的中斷狀態(tài)寄存器;獲取中斷相關(guān)的其他信息;獲取中斷相關(guān)的其他信息;對中斷進(jìn)行具體的處理;對中斷進(jìn)行具體的處理;恢復(fù)保存的上下文恢復(fù)保存的上下文;執(zhí)行執(zhí)行中斷返回指令中斷返回指令,使,使CPUCPU的控制返回到被中斷的程序的控制返回到被中斷的程序繼續(xù)執(zhí)行。繼續(xù)執(zhí)行。電子科技大學(xué)嵌入式軟件工程中心電子科

23、技大學(xué)嵌入式軟件工程中心中斷處理中斷處理 如果對一個(gè)中斷的處理還沒有完成,又發(fā)生了另如果對一個(gè)中斷的處理還沒有完成,又發(fā)生了另外一個(gè)中斷,則稱系統(tǒng)中發(fā)生了多個(gè)中斷。外一個(gè)中斷,則稱系統(tǒng)中發(fā)生了多個(gè)中斷。 非嵌套的中斷處理方式非嵌套的中斷處理方式:在處理一個(gè)中斷的時(shí):在處理一個(gè)中斷的時(shí)候,禁止再發(fā)生中斷。候,禁止再發(fā)生中斷。 嵌套的中斷處理方式嵌套的中斷處理方式:定義中斷優(yōu)先級,允許:定義中斷優(yōu)先級,允許高優(yōu)先級的中斷打斷低優(yōu)先級中斷的處理過程。高優(yōu)先級的中斷打斷低優(yōu)先級中斷的處理過程。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心非嵌套的中斷處理方式非嵌套的中斷處理方式 處理中

24、斷的時(shí)候,將處理中斷的時(shí)候,將屏蔽屏蔽所有其他的中斷請求。所有其他的中斷請求。新的中斷將被掛起,當(dāng)處理器再次允許中斷時(shí),再新的中斷將被掛起,當(dāng)處理器再次允許中斷時(shí),再由處理器進(jìn)行檢查。由處理器進(jìn)行檢查。如果程序執(zhí)行過程中發(fā)生了中斷,在執(zhí)行中斷服務(wù)如果程序執(zhí)行過程中發(fā)生了中斷,在執(zhí)行中斷服務(wù)程序的時(shí)候?qū)⒔怪袛?;程序的時(shí)候?qū)⒔怪袛?;中斷服?wù)程序執(zhí)行完成后,恢復(fù)正常執(zhí)行流程被中中斷服務(wù)程序執(zhí)行完成后,恢復(fù)正常執(zhí)行流程被中斷的程序之前再使能中斷,并由處理器檢查是否還斷的程序之前再使能中斷,并由處理器檢查是否還有中斷。有中斷。 非嵌套中斷處理方式使中斷能夠按非嵌套中斷處理方式使中斷能夠按發(fā)生順序發(fā)生

25、順序進(jìn)進(jìn)行處理。行處理。 沒有考慮優(yōu)先級,使沒有考慮優(yōu)先級,使高優(yōu)先級中斷高優(yōu)先級中斷不能得到及不能得到及時(shí)的處理,甚至導(dǎo)致時(shí)的處理,甚至導(dǎo)致中斷丟失中斷丟失。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心程序程序中斷服務(wù)程序中斷服務(wù)程序A A中斷服務(wù)程序中斷服務(wù)程序B B中斷的非嵌套順序處理中斷的非嵌套順序處理電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心嵌套的中斷處理方式嵌套的中斷處理方式 中斷被劃分為多個(gè)優(yōu)先級,中斷服務(wù)程序只中斷被劃分為多個(gè)優(yōu)先級,中斷服務(wù)程序只屏蔽屏蔽那些比當(dāng)前中斷優(yōu)先級低或是與當(dāng)前中斷優(yōu)先級那些比當(dāng)前中斷優(yōu)先級低或是與當(dāng)前中斷優(yōu)先級相同

26、的中斷,在完成必要的上下文保存后即使能相同的中斷,在完成必要的上下文保存后即使能中斷。中斷。 高優(yōu)先級中斷高優(yōu)先級中斷請求到達(dá)的時(shí)候,需要對當(dāng)前中斷請求到達(dá)的時(shí)候,需要對當(dāng)前中斷服務(wù)程序的狀態(tài)進(jìn)行保存,然后調(diào)用高優(yōu)先級中服務(wù)程序的狀態(tài)進(jìn)行保存,然后調(diào)用高優(yōu)先級中斷的服務(wù)程序。斷的服務(wù)程序。 當(dāng)高優(yōu)先級中斷的服務(wù)程序執(zhí)行完成后,再當(dāng)高優(yōu)先級中斷的服務(wù)程序執(zhí)行完成后,再恢復(fù)恢復(fù)先前的中斷服務(wù)程序繼續(xù)執(zhí)行。先前的中斷服務(wù)程序繼續(xù)執(zhí)行。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心程序程序高優(yōu)先級中斷服高優(yōu)先級中斷服務(wù)程序務(wù)程序B B中斷服務(wù)程序中斷服務(wù)程序A A中斷的嵌套處理中斷的嵌

27、套處理電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 中斷服務(wù)程序通常包括三個(gè)方面的內(nèi)容:中斷服務(wù)程序通常包括三個(gè)方面的內(nèi)容: 中斷前導(dǎo):中斷前導(dǎo): 保存中斷現(xiàn)場,進(jìn)入中斷處理。保存中斷現(xiàn)場,進(jìn)入中斷處理。用戶中斷服務(wù)程序:用戶中斷服務(wù)程序: 完成對中斷的具體處理。完成對中斷的具體處理。中斷后續(xù):中斷后續(xù): 恢復(fù)中斷現(xiàn)場,退出中斷處理?;謴?fù)中斷現(xiàn)場,退出中斷處理。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 中斷前導(dǎo)和中斷后續(xù)通常由內(nèi)核的中斷前導(dǎo)和中斷后續(xù)通常由內(nèi)核的中斷接管程序中斷接管程序

28、來實(shí)現(xiàn)。來實(shí)現(xiàn)。硬件中斷發(fā)生后,中斷接管程序獲得控制權(quán),先由中硬件中斷發(fā)生后,中斷接管程序獲得控制權(quán),先由中斷接管程序進(jìn)行處理,然后才將控制權(quán)交給相應(yīng)的用斷接管程序進(jìn)行處理,然后才將控制權(quán)交給相應(yīng)的用戶中斷服務(wù)程序。戶中斷服務(wù)程序。用戶中斷服務(wù)程序執(zhí)行完成后,又回到中斷接管程序。用戶中斷服務(wù)程序執(zhí)行完成后,又回到中斷接管程序。 中斷向量號中斷向量號0 0物理中斷向量表物理中斷向量表中斷向量號中斷向量號1 1中斷向量號中斷向量號2 2中斷向量號中斷向量號3 3中斷向量號中斷向量號n n中斷接中斷接管程序管程序中斷向量號中斷向量號0 0虛擬中斷向量表虛擬中斷向量表中斷向量號中斷向量號1 1中斷向量

29、號中斷向量號2 2中斷向量號中斷向量號3 3中斷向量號中斷向量號m m用戶中斷服務(wù)程序用戶中斷服務(wù)程序0 0用戶中斷服務(wù)程序用戶中斷服務(wù)程序1 1用戶中斷服務(wù)程序用戶中斷服務(wù)程序2 2用戶中斷服務(wù)程序用戶中斷服務(wù)程序3 3用戶中斷服務(wù)程序用戶中斷服務(wù)程序m m用戶中斷服務(wù)程序用戶中斷服務(wù)程序電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 中斷接管程序負(fù)責(zé)中斷處理的前導(dǎo)和后續(xù)部分中斷接管程序負(fù)責(zé)中斷處理的前導(dǎo)和后續(xù)部分的內(nèi)容。的內(nèi)容。中斷處理前導(dǎo)中斷處理前導(dǎo):保存必要的寄存器,并根據(jù)情況在:保存必要的寄存器,并根據(jù)情況在中斷?;蚴侨蝿?wù)棧中設(shè)置堆棧

30、的起始位置,然后調(diào)中斷?;蚴侨蝿?wù)棧中設(shè)置堆棧的起始位置,然后調(diào)用用戶中斷服務(wù)程序。用用戶中斷服務(wù)程序。 中斷處理后續(xù)中斷處理后續(xù):實(shí)現(xiàn)中斷返回前需要處理的工作,:實(shí)現(xiàn)中斷返回前需要處理的工作,主要包括恢復(fù)寄存器和堆棧,并從中斷服務(wù)程序返主要包括恢復(fù)寄存器和堆棧,并從中斷服務(wù)程序返回到被中斷的程序?;氐奖恢袛嗟某绦?。 用戶中斷服務(wù)程序被組織為一個(gè)表,稱為用戶中斷服務(wù)程序被組織為一個(gè)表,稱為虛擬虛擬中斷向量表中斷向量表。 如果需要在用戶中斷服務(wù)程序中使用關(guān)于如果需要在用戶中斷服務(wù)程序中使用關(guān)于浮點(diǎn)浮點(diǎn)運(yùn)算運(yùn)算的操作,中斷前導(dǎo)和中斷后續(xù)中還需要分的操作,中斷前導(dǎo)和中斷后續(xù)中還需要分別對浮點(diǎn)上下文進(jìn)行

31、保存和恢復(fù)。別對浮點(diǎn)上下文進(jìn)行保存和恢復(fù)。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 如果中斷處理導(dǎo)致系統(tǒng)中出現(xiàn)比被中斷任如果中斷處理導(dǎo)致系統(tǒng)中出現(xiàn)比被中斷任務(wù)具有更高優(yōu)先級的就緒任務(wù)出現(xiàn):務(wù)具有更高優(yōu)先級的就緒任務(wù)出現(xiàn):需要把需要把高優(yōu)先級高優(yōu)先級任務(wù)放入就緒隊(duì)列;任務(wù)放入就緒隊(duì)列;把被中斷的任務(wù)從執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榘驯恢袛嗟娜蝿?wù)從執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)就緒狀態(tài);完成用戶中斷服務(wù)程序后,在中斷接管程序的完成用戶中斷服務(wù)程序后,在中斷接管程序的中斷后續(xù)處理中中斷后續(xù)處理中激活重調(diào)度程序激活重調(diào)度程序,使高優(yōu)先級,使高優(yōu)先級任務(wù)能在中斷處理工作

32、完成后得到調(diào)度執(zhí)行。任務(wù)能在中斷處理工作完成后得到調(diào)度執(zhí)行。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 在允許中斷嵌套的情況下,在執(zhí)行中斷服務(wù)程在允許中斷嵌套的情況下,在執(zhí)行中斷服務(wù)程序的過程中,如果出現(xiàn)高優(yōu)先級的中斷:序的過程中,如果出現(xiàn)高優(yōu)先級的中斷:當(dāng)前中斷服務(wù)程序的執(zhí)行將被打斷,以執(zhí)行當(dāng)前中斷服務(wù)程序的執(zhí)行將被打斷,以執(zhí)行高優(yōu)先級中斷高優(yōu)先級中斷的中斷服務(wù)程序;的中斷服務(wù)程序;當(dāng)高優(yōu)先級中斷的處理完成后,被打斷的中當(dāng)高優(yōu)先級中斷的處理完成后,被打斷的中斷服務(wù)程序才又得到繼續(xù)執(zhí)行;斷服務(wù)程序才又得到繼續(xù)執(zhí)行;發(fā)生中斷嵌套時(shí),如果需要

33、進(jìn)行任務(wù)調(diào)度,發(fā)生中斷嵌套時(shí),如果需要進(jìn)行任務(wù)調(diào)度,任務(wù)的調(diào)度將任務(wù)的調(diào)度將延遲到最外層中斷處理結(jié)束延遲到最外層中斷處理結(jié)束時(shí)時(shí)才能發(fā)生。才能發(fā)生。電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 中斷服務(wù)程序使用被中斷任務(wù)的任務(wù)??臻g。中斷服務(wù)程序使用被中斷任務(wù)的任務(wù)??臻g。在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服務(wù)程序所占用的任務(wù)的??臻g可能比較大,將導(dǎo)致任務(wù)棧溢出。務(wù)程序所占用的任務(wù)的棧空間可能比較大,將導(dǎo)致任務(wù)棧溢出。 使用專門的中斷棧來滿足中斷服務(wù)程序的需要,使用專

34、門的中斷棧來滿足中斷服務(wù)程序的需要,降低任務(wù)??臻g使用的不確定性。降低任務(wù)??臻g使用的不確定性。在系統(tǒng)中開辟一個(gè)單獨(dú)的中斷棧,為所有中斷服務(wù)程序所共享。在系統(tǒng)中開辟一個(gè)單獨(dú)的中斷棧,為所有中斷服務(wù)程序所共享。中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中斷棧也不能溢出。斷棧也不能溢出。 如果實(shí)時(shí)內(nèi)核沒有提供單獨(dú)的如果實(shí)時(shí)內(nèi)核沒有提供單獨(dú)的中斷棧中斷棧,就需要為,就需要為任務(wù)棧留出足夠的空間,不但要考慮通常的任務(wù)棧留出足夠的空間,不但要考慮通常的函數(shù)函數(shù)嵌套調(diào)用嵌套調(diào)用,還需要滿足,還需要滿足中斷嵌套中斷嵌套的需要。的需要。使用單

35、獨(dú)的中斷棧還能有效降低整個(gè)系統(tǒng)對??臻g的需求,否則使用單獨(dú)的中斷棧還能有效降低整個(gè)系統(tǒng)對??臻g的需求,否則需要為每個(gè)任務(wù)棧都預(yù)留處理中斷的??臻g。需要為每個(gè)任務(wù)棧都預(yù)留處理中斷的棧空間。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心用戶棧用戶棧堆堆靜態(tài)數(shù)據(jù)靜態(tài)數(shù)據(jù)代碼代碼中斷棧中斷棧中斷向量表中斷向量表(A)(A)中斷向量表中斷向量表用戶棧用戶棧堆堆靜態(tài)數(shù)據(jù)靜態(tài)數(shù)據(jù)代碼代碼中斷棧中斷棧(B)(B)內(nèi)存高端內(nèi)存高端內(nèi)存低端內(nèi)存低端 中斷棧在內(nèi)存中的布局情況中斷棧在內(nèi)存中的布局情況電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心YourISR: Save all CPU

36、 registers; (1) Call OSIntEnter() or, increment OSIntNesting directly; (2) if (OSIntNesting = 1) (3) OSTCBCur-OSTCBStkPtr = SP; (4) Clear interrupting device; (5) Re-enable interrupts (optional) (6) Execute user code to service ISR; (7) Call OSIntExit(); (8) Restore all CPU registers; (9) Execute a

37、return from interrupt instruction; (10)Interrupts Under uC/OS-IIvoid OSIntEnter (void)OS_ENTER_CRITICAL();OSIntNesting+;OS_EXIT_CRITICAL(); 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心void OSIntExit (void)OS_ENTER_CRITICAL(); (1)if (-OSIntNesting | OSLockNesting) = 0) (2)OSIntExitY = OSUnMapTblOSRdyGrp; (3)OSPrio

38、HighRdy = (INT8U)(OSIntExitY 3) +OSUnMapTblOSRdyTblOSIntExitY);if (OSPrioHighRdy != OSPrioCur) OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OSIntCtxSw(); (4)OS_EXIT_CRITICAL();Interrupts Under uC/OS-II電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)內(nèi)核的中斷管理實(shí)時(shí)內(nèi)核的中斷管理 實(shí)時(shí)內(nèi)核通常提供如下中斷管理功能:實(shí)時(shí)內(nèi)核通常提供如下中斷管理功能: 掛接中斷服務(wù)程

39、序掛接中斷服務(wù)程序。把一個(gè)函數(shù)(用戶中斷服務(wù)程序)。把一個(gè)函數(shù)(用戶中斷服務(wù)程序)同一個(gè)虛擬中斷向量表中的中斷向量聯(lián)系在一起。當(dāng)同一個(gè)虛擬中斷向量表中的中斷向量聯(lián)系在一起。當(dāng)中斷向量對應(yīng)中斷發(fā)生的時(shí)候,被掛接的用戶中斷服中斷向量對應(yīng)中斷發(fā)生的時(shí)候,被掛接的用戶中斷服務(wù)程序就會(huì)被調(diào)用執(zhí)行;務(wù)程序就會(huì)被調(diào)用執(zhí)行; 獲得中斷服務(wù)程序入口地址獲得中斷服務(wù)程序入口地址。根據(jù)中斷向量,獲得掛。根據(jù)中斷向量,獲得掛接在該中斷向量上的中斷服務(wù)程序的入口地址;接在該中斷向量上的中斷服務(wù)程序的入口地址; 獲取中斷嵌套層次獲取中斷嵌套層次。在允許中斷嵌套的處理中,獲取。在允許中斷嵌套的處理中,獲取當(dāng)前的中斷嵌套層次

40、信息;當(dāng)前的中斷嵌套層次信息; 開中斷開中斷; 關(guān)中斷關(guān)中斷。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心用戶中斷服務(wù)程序用戶中斷服務(wù)程序 當(dāng)中斷線上發(fā)生中斷的時(shí)候,對應(yīng)中斷向量中當(dāng)中斷線上發(fā)生中斷的時(shí)候,對應(yīng)中斷向量中注冊的中斷服務(wù)程序就會(huì)被調(diào)用執(zhí)行。注冊的中斷服務(wù)程序就會(huì)被調(diào)用執(zhí)行。中斷服務(wù)程序的注冊中斷號為索引,把處理中斷的中斷服務(wù)程序的注冊中斷號為索引,把處理中斷的函數(shù)的地址放置到中斷向量的地址表中。函數(shù)的地址放置到中斷向量的地址表中。中斷服務(wù)程序的啟動(dòng)完全由中斷服務(wù)程序的啟動(dòng)完全由CPUCPU來負(fù)責(zé),不需要操來負(fù)責(zé),不需要操作系統(tǒng)的處理。作系統(tǒng)的處理。 如果處理器或

41、實(shí)時(shí)內(nèi)核允許中斷嵌套,中斷服如果處理器或?qū)崟r(shí)內(nèi)核允許中斷嵌套,中斷服務(wù)程序?qū)⒖赡鼙涣硗獾闹袛喾?wù)程序所搶占。務(wù)程序?qū)⒖赡鼙涣硗獾闹袛喾?wù)程序所搶占。中斷嵌套將使代碼更加復(fù)雜,要求中斷服務(wù)程序是中斷嵌套將使代碼更加復(fù)雜,要求中斷服務(wù)程序是可重入可重入的。的。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心用戶中斷服務(wù)程序用戶中斷服務(wù)程序 由于中斷服務(wù)程序中通常都對中斷進(jìn)行了屏蔽,由于中斷服務(wù)程序中通常都對中斷進(jìn)行了屏蔽,要求中斷服務(wù)程序應(yīng)該盡可能比較短,保證其要求中斷服務(wù)程序應(yīng)該盡可能比較短,保證其他中斷和系統(tǒng)中的任務(wù)能夠得到及時(shí)處理。他中斷和系統(tǒng)中的任務(wù)能夠得到及時(shí)處理。中斷服務(wù)

42、程序通常都只處理一些必要的操作,其他中斷服務(wù)程序通常都只處理一些必要的操作,其他操作則操作則通過任務(wù)通過任務(wù)的方式來進(jìn)行。的方式來進(jìn)行。中斷服務(wù)程序只是進(jìn)行與外圍設(shè)備相關(guān)的數(shù)據(jù)的讀中斷服務(wù)程序只是進(jìn)行與外圍設(shè)備相關(guān)的數(shù)據(jù)的讀寫操作,并在需要的情況下向外圍設(shè)備發(fā)送確認(rèn)信寫操作,并在需要的情況下向外圍設(shè)備發(fā)送確認(rèn)信息,然后喚醒另外的任務(wù)進(jìn)行進(jìn)一步的處理。息,然后喚醒另外的任務(wù)進(jìn)行進(jìn)一步的處理。 用來配合中斷服務(wù)程序的另外的任務(wù)通常被稱用來配合中斷服務(wù)程序的另外的任務(wù)通常被稱為為DSRDSR(deferred service routinedeferred service routine)。)。 電

43、子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心/*Uses to handle data from dataReceiveISR*/dsrTask() while(1) wait_for_signal_from_isr(); process_data_of_ISR(); /*Uses to receive data by interrupt*/dataReceiveISR() get_data_from _device(); send_signal_to_wakeup_dsrTask(); ISR與與DSR相結(jié)合的中斷處理方式相結(jié)合的中斷處理方式電子科技大學(xué)嵌入式軟件工程中心電子科

44、技大學(xué)嵌入式軟件工程中心用戶中斷服務(wù)程序用戶中斷服務(wù)程序 在中斷服務(wù)程序中可以使用實(shí)時(shí)內(nèi)核提供的應(yīng)用在中斷服務(wù)程序中可以使用實(shí)時(shí)內(nèi)核提供的應(yīng)用編程接口:編程接口:但一般只能使用不會(huì)導(dǎo)致調(diào)用程序可能出現(xiàn)阻塞情況但一般只能使用不會(huì)導(dǎo)致調(diào)用程序可能出現(xiàn)阻塞情況的編程接口,如可以進(jìn)行掛起任務(wù)、喚醒任務(wù)、發(fā)送的編程接口,如可以進(jìn)行掛起任務(wù)、喚醒任務(wù)、發(fā)送消息等操作;消息等操作;但不要使用分配內(nèi)存、獲得信號量等可能導(dǎo)致中斷服但不要使用分配內(nèi)存、獲得信號量等可能導(dǎo)致中斷服務(wù)程序的執(zhí)行流程被阻塞的操作。務(wù)程序的執(zhí)行流程被阻塞的操作。 對中斷的處理不受任務(wù)調(diào)度程序的控制,并優(yōu)先于任務(wù)的處理。對中斷的處理不受任務(wù)

45、調(diào)度程序的控制,并優(yōu)先于任務(wù)的處理。 如果中斷出現(xiàn)被阻塞的情況,將導(dǎo)致中斷不能被及時(shí)處理,其如果中斷出現(xiàn)被阻塞的情況,將導(dǎo)致中斷不能被及時(shí)處理,其余工作也就無法按時(shí)繼續(xù)進(jìn)行,將嚴(yán)重影響整個(gè)系統(tǒng)的確定性。余工作也就無法按時(shí)繼續(xù)進(jìn)行,將嚴(yán)重影響整個(gè)系統(tǒng)的確定性。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心用戶中斷服務(wù)程序用戶中斷服務(wù)程序 中斷服務(wù)程序不能進(jìn)行內(nèi)存分配和內(nèi)存釋中斷服務(wù)程序不能進(jìn)行內(nèi)存分配和內(nèi)存釋放:放:內(nèi)存分配和內(nèi)存釋放過程中通常都要使用信號內(nèi)存分配和內(nèi)存釋放過程中通常都要使用信號量,以實(shí)現(xiàn)對維護(hù)內(nèi)存使用情況的全局?jǐn)?shù)據(jù)結(jié)量,以實(shí)現(xiàn)對維護(hù)內(nèi)存使用情況的全局?jǐn)?shù)據(jù)結(jié)構(gòu)的保

46、護(hù)。構(gòu)的保護(hù)。 中斷服務(wù)程序也不能使用包含了這些操作中斷服務(wù)程序也不能使用包含了這些操作的編程接口。的編程接口。意味著中斷服務(wù)程序不能使用關(guān)于對象創(chuàng)建和意味著中斷服務(wù)程序不能使用關(guān)于對象創(chuàng)建和刪除方面(如任務(wù)創(chuàng)建與任務(wù)刪除)的操作。刪除方面(如任務(wù)創(chuàng)建與任務(wù)刪除)的操作。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心用戶中斷服務(wù)程序用戶中斷服務(wù)程序 中斷服務(wù)程序還需要同系統(tǒng)中的任務(wù)進(jìn)行通信。中斷服務(wù)程序還需要同系統(tǒng)中的任務(wù)進(jìn)行通信。從中斷服務(wù)程序到任務(wù)的通信機(jī)制主要包括以下從中斷服務(wù)程序到任務(wù)的通信機(jī)制主要包括以下內(nèi)容:內(nèi)容: 共享內(nèi)存共享內(nèi)存:中斷服務(wù)程序同任務(wù)共享變量、緩沖

47、區(qū),:中斷服務(wù)程序同任務(wù)共享變量、緩沖區(qū),實(shí)現(xiàn)中斷服務(wù)程序與任務(wù)之間的通信;實(shí)現(xiàn)中斷服務(wù)程序與任務(wù)之間的通信; 信號量信號量:中斷服務(wù)程序可以釋放任務(wù)正在等待的信號:中斷服務(wù)程序可以釋放任務(wù)正在等待的信號量;量;消息隊(duì)列消息隊(duì)列:中斷服務(wù)程序可以把消息發(fā)送給正在等待:中斷服務(wù)程序可以把消息發(fā)送給正在等待該消息的任務(wù);該消息的任務(wù); 管道管道:中斷服務(wù)程序可以把消息寫到任務(wù)可以進(jìn)行消:中斷服務(wù)程序可以把消息寫到任務(wù)可以進(jìn)行消息讀取的管道中;息讀取的管道中; 異步信號異步信號:中斷服務(wù)程序可以向任務(wù)發(fā)送異步信號,:中斷服務(wù)程序可以向任務(wù)發(fā)送異步信號,使任務(wù)對應(yīng)的異步信號處理程序能夠得到執(zhí)行。使任務(wù)

48、對應(yīng)的異步信號處理程序能夠得到執(zhí)行。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷時(shí)序中斷時(shí)序時(shí)間時(shí)間后臺(tái)程后臺(tái)程序序CPUCPU上下文保存上下文保存中斷服務(wù)中斷服務(wù)程序程序CPUCPU上下文恢復(fù)上下文恢復(fù)用戶中斷服務(wù)子程序代碼用戶中斷服務(wù)子程序代碼中斷延遲中斷延遲中斷響應(yīng)中斷響應(yīng)中斷恢復(fù)中斷恢復(fù)中斷請求中斷請求電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷時(shí)序中斷時(shí)序時(shí)間時(shí)間任務(wù)或任務(wù)或內(nèi)核程序內(nèi)核程序中斷請求中斷請求CPUCPU上下文保存上下文保存中斷服務(wù)中斷服務(wù)程序程序CPUCPU上下文恢復(fù)上下文恢復(fù)用戶中斷服務(wù)子程序代碼用戶中斷服務(wù)子程序代碼中斷延

49、遲中斷延遲中斷響應(yīng)中斷響應(yīng)中斷恢復(fù)中斷恢復(fù)任務(wù)任務(wù)電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷時(shí)序中斷時(shí)序中斷服中斷服務(wù)務(wù)程序程序任務(wù)任務(wù)A AB B時(shí)間時(shí)間中斷請求中斷請求(1)(1)任務(wù)或內(nèi)核程序任務(wù)或內(nèi)核程序(2)(2)中斷延遲中斷延遲中斷響應(yīng)中斷響應(yīng)獲取中斷向量獲取中斷向量(3)(3)CPUCPU上下文保存上下文保存(4)(4)內(nèi)核中斷服務(wù)程內(nèi)核中斷服務(wù)程序入口函數(shù)序入口函數(shù)(5)(5)用戶中斷服務(wù)子程序代碼用戶中斷服務(wù)子程序代碼(6)(6)內(nèi)核中斷服務(wù)程內(nèi)核中斷服務(wù)程序出口函數(shù)序出口函數(shù)(10)(10)內(nèi)核中斷服務(wù)程內(nèi)核中斷服務(wù)程序出口函數(shù)序出口函數(shù)(7)(7)C

50、PUCPU上下文恢復(fù)上下文恢復(fù)(11)(11)中斷返回中斷返回(12)(12)CPUCPU上下文恢復(fù)上下文恢復(fù)(8)(8)中斷返回中斷返回(9)(9)任務(wù)任務(wù)任務(wù)響應(yīng)任務(wù)響應(yīng)中斷恢復(fù)中斷恢復(fù)中斷恢復(fù)中斷恢復(fù)電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷延遲時(shí)間中斷延遲時(shí)間 中斷延遲時(shí)間中斷延遲時(shí)間是指從中斷發(fā)生到系統(tǒng)獲知中斷,是指從中斷發(fā)生到系統(tǒng)獲知中斷,并且開始并且開始執(zhí)行中斷服務(wù)程序執(zhí)行中斷服務(wù)程序所需要的最大滯后時(shí)所需要的最大滯后時(shí)間。間。 中斷延遲時(shí)間受到系統(tǒng)中斷延遲時(shí)間受到系統(tǒng)關(guān)中斷關(guān)中斷時(shí)間的影響:時(shí)間的影響: 實(shí)時(shí)系統(tǒng)在進(jìn)入實(shí)時(shí)系統(tǒng)在進(jìn)入臨界區(qū)代碼段臨界區(qū)代碼段

51、之前要關(guān)中斷,執(zhí)行完之前要關(guān)中斷,執(zhí)行完臨界代碼之后再開中斷。臨界代碼之后再開中斷。 關(guān)中斷的時(shí)間越長,中斷延遲就越長,并且可能引起關(guān)中斷的時(shí)間越長,中斷延遲就越長,并且可能引起中斷丟失。中斷丟失。 中斷延遲時(shí)間:中斷延遲時(shí)間: 中斷延遲時(shí)間中斷延遲時(shí)間 最大關(guān)中斷時(shí)間硬件開始處理最大關(guān)中斷時(shí)間硬件開始處理中斷到開始執(zhí)行中斷到開始執(zhí)行ISRISR第一條指令之間的時(shí)間第一條指令之間的時(shí)間。 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心中斷延遲時(shí)間中斷延遲時(shí)間 “硬件開始處理中斷到開始執(zhí)行硬件開始處理中斷到開始執(zhí)行ISR第一條指令第一條指令之間的時(shí)間之間的時(shí)間”由硬件決定。由硬件決定。 在確定中斷延遲時(shí)間時(shí),要使用在確定中斷延遲時(shí)間時(shí),要使用最壞情況最壞情況下的下的關(guān)中斷時(shí)間,即關(guān)中斷時(shí)間,即最大關(guān)中斷時(shí)間最大關(guān)中斷時(shí)間。 “最大關(guān)中斷時(shí)間最大關(guān)中斷時(shí)間”取決于兩方面的因素:取決于兩方面的因素: 內(nèi)核關(guān)中斷時(shí)間內(nèi)核關(guān)中斷時(shí)間 內(nèi)核在執(zhí)行一些臨界區(qū)的代碼時(shí)采取了關(guān)中斷;內(nèi)核在執(zhí)行一些臨界區(qū)的代碼時(shí)采取了關(guān)中斷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論