南航嵌入式實時操作系統課件第7章中斷和時間管理_第1頁
南航嵌入式實時操作系統課件第7章中斷和時間管理_第2頁
南航嵌入式實時操作系統課件第7章中斷和時間管理_第3頁
南航嵌入式實時操作系統課件第7章中斷和時間管理_第4頁
南航嵌入式實時操作系統課件第7章中斷和時間管理_第5頁
已閱讀5頁,還剩86頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1第七章第七章 中斷和時間管理中斷和時間管理 27.1 中斷管理中斷管理 v中斷的分類中斷的分類 v中斷處理的過程中斷處理的過程 v實時內核的中斷管理實時內核的中斷管理 v用戶中斷服務程序用戶中斷服務程序 v中斷時序中斷時序* 37.1.1 概述概述 v從發展過程來看:從發展過程來看: 中斷(中斷(interrupt)最初被用來替換)最初被用來替換I/O操操作的作的輪詢處理輪詢處理方式,以提高方式,以提高I/O處理的效處理的效率。率。 隨后,中斷又包含了隨后,中斷又包含了自陷自陷(trap,也稱為,也稱為內部中斷內部中斷或是或是軟件中斷軟件中斷)的功能。)的功能。 后來,中斷的概念得到進一步擴

2、大,被后來,中斷的概念得到進一步擴大,被定義為定義為導致程序正常執行流程發生改變導致程序正常執行流程發生改變的事件的事件(不包括程序的分支情況)。可(不包括程序的分支情況)。可把概念被擴大的中斷稱為把概念被擴大的中斷稱為廣義中斷廣義中斷。4概述概述 v在實際應用中,廣義的中斷通常被分為中斷、在實際應用中,廣義的中斷通常被分為中斷、自陷和異常(自陷和異常(exception)等類別。)等類別。 中斷中斷是由于是由于CPU外部的原因而改變程序執行流外部的原因而改變程序執行流程的過程,屬于程的過程,屬于異步事件異步事件,又稱為,又稱為硬件中斷硬件中斷。自陷和異常則為自陷和異常則為同步事件同步事件;

3、自陷自陷表示通過處理器所擁有的表示通過處理器所擁有的軟件指令軟件指令、可預可預期期地使處理器正在執行的程序的執行流程發生地使處理器正在執行的程序的執行流程發生變化,以執行特定的程序。自陷是變化,以執行特定的程序。自陷是顯式的事件顯式的事件,需要無條件地執行;需要無條件地執行; vMotorola 68000系列中的系列中的Trap指令指令 vARM中的中的SWI指令指令 vIntel 80 x86中的中的INT指令指令 5概述概述 異常異常為為CPU自動產生自動產生的自陷,以處理異的自陷,以處理異常事件。常事件。 v如被如被0除、執行非法指令和內存保護故除、執行非法指令和內存保護故障等。障等。

4、 v異常沒有對應的處理器指令異常沒有對應的處理器指令,當異常,當異常事件發生時,處理器也需要無條件地事件發生時,處理器也需要無條件地掛起當前運行的程序,執行特定的處掛起當前運行的程序,執行特定的處理程序。理程序。 6概述概述 v對實時系統,中斷必不可少對實時系統,中斷必不可少v實時內核大都提供了管理中斷的機制實時內核大都提供了管理中斷的機制v方便開發中斷處理程序,提高中斷處方便開發中斷處理程序,提高中斷處理的可靠性理的可靠性v使中斷處理程序與任務有機結合使中斷處理程序與任務有機結合77.1.2 中斷的分類中斷的分類 v分類方式分類方式 硬件中斷是否可以被屏蔽:硬件中斷是否可以被屏蔽:v可屏蔽中

5、斷可屏蔽中斷和和不可屏蔽中斷不可屏蔽中斷 中斷源:中斷源:v 硬件中斷硬件中斷和和軟件中斷軟件中斷 中斷信號的產生:中斷信號的產生:v 邊緣觸發中斷邊緣觸發中斷和和電平觸發中斷電平觸發中斷 中斷服務程序的調用方式:中斷服務程序的調用方式: v向量中斷向量中斷、直接中斷直接中斷和和間接中斷間接中斷8可屏蔽中斷和不可屏蔽中斷可屏蔽中斷和不可屏蔽中斷 v由于中斷的發生是異步的,程序的正常執行流程隨由于中斷的發生是異步的,程序的正常執行流程隨時有可能被中斷服務程序打斷。如果程序正在進行時有可能被中斷服務程序打斷。如果程序正在進行某些重要運算,中斷服務程序的插入將有可能改變某些重要運算,中斷服務程序的插

6、入將有可能改變某些寄存器的數據,造成程序的運行發生錯誤。某些寄存器的數據,造成程序的運行發生錯誤。v可屏蔽中斷可屏蔽中斷:能夠被屏蔽掉的中斷。:能夠被屏蔽掉的中斷。 外部設備的中斷請求信號一般需要先通過外部設備的中斷請求信號一般需要先通過CPU外部的中斷外部的中斷控制器,再與控制器,再與CPU相應的引腳相連。相應的引腳相連。 可編程中斷控制器可以通過軟件進行控制,以禁止或是允可編程中斷控制器可以通過軟件進行控制,以禁止或是允許中斷。許中斷。 v不可屏蔽中斷不可屏蔽中斷:在任何時候都不可屏蔽的。:在任何時候都不可屏蔽的。 一個比較典型的例子是掉電中斷,當發生掉電時,無論程一個比較典型的例子是掉電

7、中斷,當發生掉電時,無論程序正在進行什么樣的運算,它都肯定無法正常運行下去。序正在進行什么樣的運算,它都肯定無法正常運行下去。這種情況下,急需進行的是一些掉電保護的操作。對這類這種情況下,急需進行的是一些掉電保護的操作。對這類中斷,應隨時進行響應。中斷,應隨時進行響應。 9硬件中斷和軟件中斷硬件中斷和軟件中斷 v硬件中斷:由于硬件中斷:由于CPU外部的設備所產生的外部的設備所產生的中斷。中斷。異步事件異步事件:可能在程序執行的任何位置發生,:可能在程序執行的任何位置發生,發生中斷的時間通常是不確定的。發生中斷的時間通常是不確定的。v軟件中斷:同步中斷或是自陷,通過處理器軟件中斷:同步中斷或是自

8、陷,通過處理器的軟件指令來實現。的軟件指令來實現。 產生中斷的時機是預知的,可根據需要在程序產生中斷的時機是預知的,可根據需要在程序中進行設定。中進行設定。 軟件中斷的處理程序以軟件中斷的處理程序以同步的方式同步的方式進行執行。進行執行。 其處理方式同硬件中斷處理程序類似。其處理方式同硬件中斷處理程序類似。10硬件中斷和軟件中斷硬件中斷和軟件中斷 v軟件中斷是一種非常重要的機制:軟件中斷是一種非常重要的機制: 系統可通過該機制在系統可通過該機制在用戶模式執行特權用戶模式執行特權模式下的操作。模式下的操作。 是是軟件調試軟件調試的一個重要手段,如的一個重要手段,如Intel 80 x86中的中的

9、INT 3,設置斷點,調試器可,設置斷點,調試器可以用它來形成觀察點,并查看隨程序執以用它來形成觀察點,并查看隨程序執行而動態變化的事件情況。行而動態變化的事件情況。 11邊緣觸發中斷和電平觸發中斷邊緣觸發中斷和電平觸發中斷 v邊緣觸發中斷:中斷線邊緣觸發中斷:中斷線從低變到高從低變到高或是或是從高從高變到低變到低時,中斷信號就被發送出去,并只有時,中斷信號就被發送出去,并只有在下一次的從低變到高或是從高變到低時才在下一次的從低變到高或是從高變到低時才會再度觸發中斷。會再度觸發中斷。 事件發生的事件發生的時間非常短時間非常短,有可能出現中斷控制,有可能出現中斷控制器器丟失中斷丟失中斷的情況。的

10、情況。 如果多個設備連接到同一個中斷線,即使只有如果多個設備連接到同一個中斷線,即使只有一個設備產生了中斷信號,也必須調用中斷線一個設備產生了中斷信號,也必須調用中斷線對應的所有中斷服務程序來進行匹配,否則會對應的所有中斷服務程序來進行匹配,否則會出現中斷的軟件丟失情況。出現中斷的軟件丟失情況。 12邊緣觸發中斷和電平觸發中斷邊緣觸發中斷和電平觸發中斷 v電平觸發中斷:在硬件中斷線的電平觸發中斷:在硬件中斷線的電平發生變電平發生變化化時產生中斷信號,并且中斷信號的有效性時產生中斷信號,并且中斷信號的有效性將持續保持下去,直到中斷信號被清除。將持續保持下去,直到中斷信號被清除。 能夠降低中斷信號

11、能夠降低中斷信號傳送丟失傳送丟失的情況的情況 能通過更有效的方式來服務中斷,每個為該中能通過更有效的方式來服務中斷,每個為該中斷服務后的斷服務后的ISR都要向外圍設備進行確認,然后都要向外圍設備進行確認,然后取消該設備對中斷線的操作。取消該設備對中斷線的操作。 當中斷線的最后一個設備得到中斷服務后,中當中斷線的最后一個設備得到中斷服務后,中斷線的電平就會發生變化,不用對連接到同一斷線的電平就會發生變化,不用對連接到同一個硬件中斷線的所有中斷服務程序進行嘗試。個硬件中斷線的所有中斷服務程序進行嘗試。13向量中斷、直接中斷和間接中斷向量中斷、直接中斷和間接中斷 v向量中斷:通過向量中斷:通過中斷向

12、量中斷向量來調用中斷服務程來調用中斷服務程序。序。 v直接中斷:中斷對應的中斷服務程序的直接中斷:中斷對應的中斷服務程序的入口入口地址地址是一個固定值,當中斷發生的時候,程是一個固定值,當中斷發生的時候,程序執行流程將直接跳轉到中斷服務程序的入序執行流程將直接跳轉到中斷服務程序的入口地址,執行中斷服務程序。口地址,執行中斷服務程序。 v間接中斷:中斷服務程序的入口地址由間接中斷:中斷服務程序的入口地址由寄存寄存器器提供。提供。14向量中斷向量中斷 v中斷硬件設備的硬件中斷線(也稱為中斷請中斷硬件設備的硬件中斷線(也稱為中斷請求求IRQ)被中斷控制器匯集成)被中斷控制器匯集成中斷向量中斷向量(i

13、nterrupt vector);); v每個中斷向量對應一個中斷服務程序每個中斷向量對應一個中斷服務程序(interrupt service routine,ISR),用),用來存放來存放中斷服務程序的入口地址中斷服務程序的入口地址或是或是中斷服中斷服務程序的第一條指令務程序的第一條指令。 v系統中通常包含多個中斷向量,存放這些中系統中通常包含多個中斷向量,存放這些中斷向量對應中斷服務程序入口地址的內存區斷向量對應中斷服務程序入口地址的內存區域被稱為域被稱為中斷向量表中斷向量表。 15向量中斷向量中斷 v在在Intel 80 x86處理器中,中斷向量表處理器中,中斷向量表包含包含256個入口

14、,每個中斷向量需要四個入口,每個中斷向量需要四個字節(存放中斷服務程序的首址)。個字節(存放中斷服務程序的首址)。v ARM的中斷向量表開始于內存地址的中斷向量表開始于內存地址0 x00000000或是或是0 xFFFF0000處。處。 16中斷控制器中斷控制器 v對多個可屏蔽中斷源進行管理對多個可屏蔽中斷源進行管理,使,使CPU核心能和更多的中斷資源相聯系。核心能和更多的中斷資源相聯系。v 能夠對中斷進行排隊能夠對中斷進行排隊: 避免中斷信號的丟失避免中斷信號的丟失 對不同的中斷進行優先級配置,使高優對不同的中斷進行優先級配置,使高優先級中斷能夠中斷低優先級中斷,滿足先級中斷能夠中斷低優先級

15、中斷,滿足系統中具有更高時間約束特性功能的需系統中具有更高時間約束特性功能的需要要17中斷控制器中斷控制器 v在基于在基于x86的架構中,的架構中,8259是一個非常通用的中斷控制器芯片(稱是一個非常通用的中斷控制器芯片(稱為為PIC,programmable interrupt controller)。)。 v每個每個PIC只能夠處理只能夠處理8個中斷,為支持更多數量的中斷,需要組織成個中斷,為支持更多數量的中斷,需要組織成菊花鏈(菊花鏈(daisy chain)的方式,把一個)的方式,把一個PIC的輸出連接到另一個的輸出連接到另一個PIC的輸入上。的輸入上。 18中斷控制器中斷控制器 v在

16、基于在基于x86的架構中,的架構中,8259是一個非常通是一個非常通用的中斷控制器芯片(稱為用的中斷控制器芯片(稱為PIC,programmable interrupt controller)。)。 v每個每個PIC只能夠處理只能夠處理8個中斷,為支持更多個中斷,為支持更多數量的中斷,需要組織成菊花鏈(數量的中斷,需要組織成菊花鏈(daisy chain)的方式,把一個)的方式,把一個PIC的輸出連接到的輸出連接到另一個另一個PIC的輸入上。的輸入上。 19ARM向量中斷控制器向量中斷控制器 v特特 性性 ARM PrimeCell TM向量中斷控制器;向量中斷控制器; 32個中斷請求輸入;個

17、中斷請求輸入; 16個向量個向量IRQ中斷;中斷; 16個優先級,可動態分配給中斷請求;個優先級,可動態分配給中斷請求; 軟件中斷產生。軟件中斷產生。20向量中斷控制器方框圖向量中斷控制器方框圖 21ARM向量中斷控制器向量中斷控制器 描描 述述v向量中斷控制器向量中斷控制器(VIC)具有具有32個中斷請求輸個中斷請求輸入,可將其編程分為入,可將其編程分為3類:類:lFIQl向量向量IRQl非向量非向量IRQv可編程分配機制意味著不同外設的中斷優可編程分配機制意味著不同外設的中斷優先級可以動態分配并調整。先級可以動態分配并調整。 22ARM向量中斷控制器向量中斷控制器 v 快速中斷請求快速中斷

18、請求(FIQ)要求具有要求具有最高優先級最高優先級。v如果分配給如果分配給FIQ的請求多于的請求多于1個,個,VIC將中將中斷請求相斷請求相“或或”后向后向ARM處理器產生處理器產生FIQ信號。信號。v當只有一個中斷被分配為當只有一個中斷被分配為FIQ時,可實現時,可實現最短的最短的FIQ等待時間等待時間,因為,因為FIQ服務程序只服務程序只要簡單地啟動器件的處理就可以了。但如要簡單地啟動器件的處理就可以了。但如果分配給果分配給 FIQ級的中斷多于級的中斷多于1個,個,FIQ服務服務程序從程序從VIC中讀出一個字來識別產生中斷中讀出一個字來識別產生中斷請求的請求的FIQ中斷源是哪一個。中斷源是

19、哪一個。 23ARM向量中斷控制器向量中斷控制器 v向量向量IRQ具有具有中等優先級中等優先級。v該級別可分配該級別可分配32個請求中的個請求中的16個個。32個請求中的任意一個請求中的任意一個都可分配到個都可分配到16個向量個向量IRQ Slot中的任意一個,其中中的任意一個,其中Slot0具有最高優先級,而具有最高優先級,而Slotl5則為最低優先級。則為最低優先級。v非向量非向量IRQ的的優先級最低優先級最低。v VIC將所有將所有向量和非向量向量和非向量IRQ相相“或或”向向ARM處理器產處理器產生生IRQ信號。信號。IRQ服務程序可通過讀取服務程序可通過讀取VIC的一個寄存器的一個寄

20、存器立即啟動并跳轉到相應地址。如果有任意一個向量立即啟動并跳轉到相應地址。如果有任意一個向量IRQ發出請求,則發出請求,則VIC提供最高優先級請求提供最高優先級請求IRQ服務程序的地服務程序的地址,否則提供默認程序的地址。該默認程序由所有非向址,否則提供默認程序的地址。該默認程序由所有非向量量IRQ共用。默認程序可讀取任何共用。默認程序可讀取任何VIC寄存器以確定哪個寄存器以確定哪個IRQ被激活。被激活。 247.1.3 中斷處理的過程中斷處理的過程 v中斷處理的過程分為:中斷處理的過程分為: 中斷檢測中斷檢測 中斷響應中斷響應 中斷處理中斷處理 25中斷檢測中斷檢測 v中斷檢測在中斷檢測在每

21、條指令結束時每條指令結束時進行,檢測進行,檢測是否有中斷請求或是否滿足異常條件。是否有中斷請求或是否滿足異常條件。 為滿足中斷處理的需要,在指令周期中使為滿足中斷處理的需要,在指令周期中使用了用了中斷周期中斷周期。在中斷周期中,處理器檢查是否有中斷發在中斷周期中,處理器檢查是否有中斷發生,即是否出現中斷信號。生,即是否出現中斷信號。 v沒有中斷信號:處理器繼續運行,并通過取指沒有中斷信號:處理器繼續運行,并通過取指周期取當前程序的下一條指令;周期取當前程序的下一條指令; v有中斷信號:將進入中斷響應,對中斷進行處有中斷信號:將進入中斷響應,對中斷進行處理。理。 26 中斷和指令周期中斷和指令周

22、期 27中斷響應中斷響應 v中斷響應是由中斷響應是由處理器內部硬件處理器內部硬件完成的中斷序完成的中斷序列,而不是由程序執行的。列,而不是由程序執行的。v在在Intel 80 x86中,中斷響應過程的操作如中,中斷響應過程的操作如下:下: 對可屏蔽中斷,從對可屏蔽中斷,從8259中斷控制器芯片讀取中中斷控制器芯片讀取中斷向量號;斷向量號; 將標志寄存器將標志寄存器EFLAG、CS和和IP壓棧;壓棧; 對于硬件中斷,復位標志寄存器中的對于硬件中斷,復位標志寄存器中的IF和和TF位,位,禁止可屏蔽外部中斷和單步異常;禁止可屏蔽外部中斷和單步異常; 根據中斷向量號,查找中斷向量表,根據中斷根據中斷向

23、量號,查找中斷向量表,根據中斷服務程序的首址轉移到中斷服務程序執行。服務程序的首址轉移到中斷服務程序執行。28中斷處理中斷處理 v中斷處理:執行中斷服務程序。中斷處理:執行中斷服務程序。 中斷服務程序用來處理自陷、異常或是中斷服務程序用來處理自陷、異常或是中斷。中斷。 盡管導致自陷、異常和中斷的事件不同,盡管導致自陷、異常和中斷的事件不同,但大都具有相同的中斷服務程序結構。但大都具有相同的中斷服務程序結構。29中斷處理中斷處理 v中斷服務程序的主要內容:中斷服務程序的主要內容: 保存上下文:保存中斷服務程序將要使用的保存上下文:保存中斷服務程序將要使用的所有所有寄存器的內容寄存器的內容,以便于

24、在退出中斷服務程序之前,以便于在退出中斷服務程序之前進行恢復;進行恢復; 如果中斷向量被多個設備所共享,為了確定產生如果中斷向量被多個設備所共享,為了確定產生該中斷信號的設備,需要該中斷信號的設備,需要輪詢輪詢這些設備的中斷狀這些設備的中斷狀態寄存器;態寄存器; 獲取中斷相關的其他信息;獲取中斷相關的其他信息; 對中斷進行具體的處理;對中斷進行具體的處理; 恢復保存的上下文恢復保存的上下文; 執行執行中斷返回指令中斷返回指令,使,使CPU的控制返回到被中斷的控制返回到被中斷的程序繼續執行。的程序繼續執行。30中斷處理中斷處理 v如果對一個中斷的處理還沒有完成,如果對一個中斷的處理還沒有完成,又

25、發生了另外一個中斷,則稱系統中又發生了另外一個中斷,則稱系統中發生了多個中斷。發生了多個中斷。 非嵌套的中斷處理方式非嵌套的中斷處理方式:在處理一個中:在處理一個中斷的時候,禁止再發生中斷。斷的時候,禁止再發生中斷。 嵌套的中斷處理方式嵌套的中斷處理方式:定義中斷優先級,:定義中斷優先級,允許高優先級的中斷打斷低優先級中斷允許高優先級的中斷打斷低優先級中斷的處理過程。的處理過程。31非嵌套的中斷處理方式非嵌套的中斷處理方式 v處理中斷的時候,將處理中斷的時候,將屏蔽屏蔽所有其他的中斷請求。所有其他的中斷請求。 新的中斷將被掛起,當處理器再次允許中斷時,再新的中斷將被掛起,當處理器再次允許中斷時

26、,再由處理器進行檢查。由處理器進行檢查。 如果程序執行過程中發生了中斷,在執行中斷服務如果程序執行過程中發生了中斷,在執行中斷服務程序的時候將禁止中斷;程序的時候將禁止中斷;中斷服務程序執行完成后,恢復正常執行流程被中中斷服務程序執行完成后,恢復正常執行流程被中斷的程序之前再使能中斷,并由處理器檢查是否還斷的程序之前再使能中斷,并由處理器檢查是否還有中斷。有中斷。 v非嵌套中斷處理方式使中斷能夠按非嵌套中斷處理方式使中斷能夠按發生順序發生順序進進行處理。行處理。 v沒有考慮優先級沒有考慮優先級,使,使高優先級中斷高優先級中斷不能得到及不能得到及時的處理,甚至導致時的處理,甚至導致中斷丟失中斷丟

27、失。32中斷的非嵌套順序處理中斷的非嵌套順序處理 33嵌套的中斷處理方式嵌套的中斷處理方式 v中斷被劃分為多個優先級,中斷服務程序只中斷被劃分為多個優先級,中斷服務程序只屏蔽屏蔽那些那些比當前中斷優先級低或是與當前中比當前中斷優先級低或是與當前中斷優先級相同斷優先級相同的中斷,在完成必要的上下文的中斷,在完成必要的上下文保存后即使能中斷。保存后即使能中斷。 v高優先級中斷請求高優先級中斷請求到達的時候,需要對當前到達的時候,需要對當前中斷服務程序的狀態進行保存,然后調用高中斷服務程序的狀態進行保存,然后調用高優先級中斷的服務程序。優先級中斷的服務程序。 v當高優先級中斷的服務程序執行完成后,再

28、當高優先級中斷的服務程序執行完成后,再恢復恢復先前的中斷服務程序繼續執行。先前的中斷服務程序繼續執行。34 中斷的嵌套處理中斷的嵌套處理 357.1.4 實時內核的中斷管理實時內核的中斷管理 v中斷服務程序通常包括三個方面的內中斷服務程序通常包括三個方面的內容:容:中斷前導:中斷前導: v保存中斷現場,進入中斷處理。保存中斷現場,進入中斷處理。 用戶中斷服務程序:用戶中斷服務程序:v 完成對中斷的具體處理。完成對中斷的具體處理。 中斷后續:中斷后續: v恢復中斷現場,退出中斷處理。恢復中斷現場,退出中斷處理。36實時內核的中斷管理實時內核的中斷管理 v中斷前導和中斷后續通常由內核的中斷前導和中

29、斷后續通常由內核的中斷接管程序中斷接管程序來實現。來實現。 硬件中斷發生后,中斷接管程序獲得控制權,先由中斷接管程硬件中斷發生后,中斷接管程序獲得控制權,先由中斷接管程序進行處理,然后才將控制權交給相應的用戶中斷服務程序。序進行處理,然后才將控制權交給相應的用戶中斷服務程序。 用戶中斷服務程序執行完成后,又回到中斷接管程序。用戶中斷服務程序執行完成后,又回到中斷接管程序。37實時內核的中斷管理實時內核的中斷管理 v中斷接管程序負責中斷處理的前導和后續部分的內中斷接管程序負責中斷處理的前導和后續部分的內容。容。 中斷處理前導中斷處理前導:保存必要的寄存器,并根據情況在中斷棧:保存必要的寄存器,并

30、根據情況在中斷棧或是任務棧中設置堆棧的起始位置,然后調用用戶中斷服或是任務棧中設置堆棧的起始位置,然后調用用戶中斷服務程序。務程序。 中斷處理后續中斷處理后續:實現中斷返回前需要處理的工作,主要包:實現中斷返回前需要處理的工作,主要包括恢復寄存器和堆棧,并從中斷服務程序返回到被中斷的括恢復寄存器和堆棧,并從中斷服務程序返回到被中斷的程序。程序。 v用戶中斷服務程序被組織為一個表,稱為用戶中斷服務程序被組織為一個表,稱為虛擬中斷虛擬中斷向量表向量表。 v如果需要在用戶中斷服務程序中使用關于如果需要在用戶中斷服務程序中使用關于浮點運算浮點運算的操作,中斷前導和中斷后續中還需要分別對浮點的操作,中斷

31、前導和中斷后續中還需要分別對浮點上下文進行保存和恢復。上下文進行保存和恢復。38實時內核的中斷管理實時內核的中斷管理 v如果中斷處理導致系統中出現比被中斷如果中斷處理導致系統中出現比被中斷任務具有更任務具有更高優先級的就緒任務高優先級的就緒任務出現:出現: 需要把需要把高優先級高優先級任務放入就緒隊列;任務放入就緒隊列; 把被中斷的任務從執行狀態轉變為把被中斷的任務從執行狀態轉變為就緒狀就緒狀態態; 完成用戶中斷服務程序后,在中斷接管程完成用戶中斷服務程序后,在中斷接管程序的中斷后續處理中激活序的中斷后續處理中激活重調度程序重調度程序,使,使高優先級任務能在中斷處理工作完成后得高優先級任務能在

32、中斷處理工作完成后得到調度執行。到調度執行。39實時內核的中斷管理實時內核的中斷管理 v在允許中斷嵌套的情況下,在執行中斷在允許中斷嵌套的情況下,在執行中斷服務程序的過程中,如果出現服務程序的過程中,如果出現高優先級高優先級的中斷的中斷: 當前中斷服務程序的執行將被打斷,以執當前中斷服務程序的執行將被打斷,以執行行高優先級中斷高優先級中斷的中斷服務程序;的中斷服務程序; 當高優先級中斷的處理完成后,被打斷的當高優先級中斷的處理完成后,被打斷的中斷服務程序才又得到繼續執行;中斷服務程序才又得到繼續執行; 發生中斷嵌套時,如果需要進行任務調度,發生中斷嵌套時,如果需要進行任務調度,任務的調度將任務

33、的調度將延遲到最外層中斷處理結束延遲到最外層中斷處理結束時才能發生。時才能發生。40實時內核的中斷管理實時內核的中斷管理 v中斷服務程序使用被中斷任務的任務棧空間。中斷服務程序使用被中斷任務的任務棧空間。 在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服在允許中斷嵌套處理的情況下,如果中斷嵌套層次過多,中斷服務程序所占用的任務的棧空間可能比較大,將導致任務棧溢出。務程序所占用的任務的棧空間可能比較大,將導致任務棧溢出。v使用使用專門的中斷棧專門的中斷棧來滿足中斷服務程序的需要,降低任來滿足中斷服務程序的需要,降低任務棧空間使用的不確定性。務棧空間使用的不確定性。 在系統中開辟一個單獨的

34、中斷棧,為所有中斷服務程序所共享。在系統中開辟一個單獨的中斷棧,為所有中斷服務程序所共享。中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中中斷棧必須擁有足夠的空間,即使在最壞中斷嵌套的情況下,中斷棧也不能溢出。斷棧也不能溢出。 v如果實時內核沒有提供單獨的如果實時內核沒有提供單獨的中斷棧中斷棧,就需要為任務棧,就需要為任務棧留出足夠的空間,不但要考慮通常的留出足夠的空間,不但要考慮通常的函數嵌套調用函數嵌套調用,還,還需要滿足需要滿足中斷嵌套中斷嵌套的需要。的需要。 使用單獨的中斷棧還能有效降低整個系統對棧空間的需求,否則使用單獨的中斷棧還能有效降低整個系統對棧空間的需求,否則需要為每

35、個任務棧都預留處理中斷的棧空間。需要為每個任務棧都預留處理中斷的棧空間。 41 C/OSII的中斷處理的中斷處理 42Interrupts Under uC/OS-IIYourISR: Save all CPU 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)

36、(6) Execute user code to service ISR; (7) Call OSIntExit(); (8) Restore all CPU registers; (9) Execute a return from interrupt instruction; (10)void OSIntEnter (void) OS_ENTER_CRITICAL(); OSIntNesting+; OS_EXIT_CRITICAL(); 43Interrupts Under uC/OS-IIvoid OSIntExit (void) OS_ENTER_CRITICAL(); (1) if

37、(-OSIntNesting | OSLockNesting) = 0) (2) OSIntExitY = OSUnMapTblOSRdyGrp; (3) OSPrioHighRdy = (INT8U)(OSIntExitY 0)v /* 0 means no delay! */ v OS_ENTER_CRITICAL(); v if (OSRdyTblOSTCBCur-OSTCBY &= OSTCBCur-OSTCBBitX) = 0) v /* Delay current task */ v OSRdyGrp &= OSTCBCur-OSTCBBitY; v v OSTCB

38、Cur-OSTCBDly = ticks; v /* Load ticks in TCB */ v OS_EXIT_CRITICAL(); v OS_Sched(); v /* Find next task to run! */ v v73時間管理時間管理 v管理功能是通過管理功能是通過tick處理程序來實現處理程序來實現的。的。 定時器發生中斷后,執行系統時鐘中斷定時器發生中斷后,執行系統時鐘中斷處理程序,并在中斷處理程序中調用處理程序,并在中斷處理程序中調用tick處理程序,實現系統中與時間和定時相處理程序,實現系統中與時間和定時相關的操作。關的操作。 tick處理程序作為實時內核的一部分

39、,與處理程序作為實時內核的一部分,與具體的定時器具體的定時器/計數器硬件無關,由系統計數器硬件無關,由系統時鐘中斷處理程序調用,使實時內核具時鐘中斷處理程序調用,使實時內核具有對不同定時器有對不同定時器/計數器硬件的適應性。計數器硬件的適應性。 74v圖圖vtick處理程序處理程序 75Tick Under uC/OS-IIvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OST

40、CBStkPtr = SP; v v Call OSTimeTick(); v Clear interrupting device; v Re-enable interrupts (optional); v Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v76vvoid OSTimeTick (void) v v#if OS_CRITICAL_METHOD = 3 v OS_CPU_SR cpu_sr; v#endif v OS_TCB *ptcb;

41、 v OSTimeTickHook(); (1) v#if OS_TIME_GET_SET_EN 0 v OS_ENTER_CRITICAL(); v OSTime+; (2) v OS_EXIT_CRITICAL(); v#endif v if (OSRunning = TRUE) v ptcb = OSTCBList; (3) v while (ptcb-OSTCBPrio != OS_IDLE_PRIO) (4) v OS_ENTER_CRITICAL(); v if (ptcb-OSTCBDly != 0) v if (-ptcb-OSTCBDly = 0) v if (ptcb-OS

42、TCBStat & OS_STAT_SUSPEND) = 0 x00) (5) v OSRdyGrp |= ptcb-OSTCBBitY; (6) v OSRdyTblptcb-OSTCBY |= ptcb-OSTCBBitX; v else v ptcb-OSTCBDly = 1; v v v v ptcb = ptcb-OSTCBNext; v OS_EXIT_CRITICAL(); v v v77Tick Under uC/OS-II based on DSRvvoid TickTask (void *pdata) v v pdata = pdata; v for (;) v O

43、SMboxPend(.); /* Wait for signal from Tick ISR */ v OSTimeTick(); v OS_Sched(); v vvvoid OSTickISR(void) v v Save processor registers; v Call OSIntEnter() or increment OSIntNesting; v if (OSIntNesting = 1) v OSTCBCur-OSTCBStkPtr = SP; v v Post a dummy message (e.g. (void *)1) to the tick mailbox; v

44、Call OSIntExit(); v Restore processor registers; v Execute a return from interrupt instruction; v78OSTickISR Under 80 x86 vOSTickISR PROC FAR v PUSHA ; Save interrupted tasks context v PUSH ES v PUSH DS v MOV AX, SEG _OSIntNesting ; Reload DS v MOV DS, AX v INC BYTE PTR _OSIntNesting; Notify uC/OS-I

45、I of ISR v INT 081H ; Chain into DOSs tick ISR v CALL FAR PTR _OSTimeTick ; Process system tick v CALL FAR PTR _OSIntExit ; Notify uC/OS-II of end of ISR v POP DS ; Restore interrupted tasks context v POP ES v POPA v IRET ; Return to interrupted task v_OSTickISR ENDP79時間管理時間管理 v相對時間即系統時間,是指相對于系統啟動以來

46、的相對時間即系統時間,是指相對于系統啟動以來的時間,以時間,以tick為單位,每發生一個為單位,每發生一個tick,對系統的,對系統的相對時間進行一次加相對時間進行一次加1操作。操作。 v實時內核根據實時內核根據tick對應的時間長度,可以把相對時對應的時間長度,可以把相對時間轉換為以秒或是毫秒為單位的其他時間格式,并間轉換為以秒或是毫秒為單位的其他時間格式,并可根據實時時鐘獲得日歷時間。可根據實時時鐘獲得日歷時間。 如果對任務設置了時間片處理方式,需要在如果對任務設置了時間片處理方式,需要在tick處理程序處理程序中對當前正在運行的任務的已執行時間進行更新,使任務中對當前正在運行的任務的已執

47、行時間進行更新,使任務的已執行時間數值加的已執行時間數值加1。 執行加執行加1操作后,如果任務的已執行時間同任務的時間片操作后,如果任務的已執行時間同任務的時間片相等,表示任務使用完一個時間片的執行時間,需要結束相等,表示任務使用完一個時間片的執行時間,需要結束當前任務的執行,設置調度標志,把當前任務放置到就緒當前任務的執行,設置調度標志,把當前任務放置到就緒鏈。鏈。 80時間管理時間管理 v時間等待鏈用來存放需要延遲處理的時間等待鏈用來存放需要延遲處理的對象:對象: 產生產生tick后,需要對時間等待鏈中的對象后,需要對時間等待鏈中的對象的剩余等待時間值進行處理。的剩余等待時間值進行處理。

48、對于時間等待的對象,通常都被組織為對于時間等待的對象,通常都被組織為差分鏈表的方式進行管理,以有效降低差分鏈表的方式進行管理,以有效降低時間等待對象的管理開銷。時間等待對象的管理開銷。 在時間差分鏈中,每個表項所包含的計在時間差分鏈中,每個表項所包含的計時值并非當前時刻到表項激活時刻的絕時值并非當前時刻到表項激活時刻的絕對計數,而是該表項和先于它的所有表對計數,而是該表項和先于它的所有表項的計數值之和。項的計數值之和。81時間管理時間管理 v圖圖v差分鏈差分鏈 v在當前時刻,在當前時刻,A對象需要等待對象需要等待3個時間單位個時間單位就應被激活,就應被激活,B對象需要等待對象需要等待5(3+2

49、)個時)個時間單位就應被激活,間單位就應被激活,C對象需要等待對象需要等待10(3+2+5)個時間單位就應被激活,)個時間單位就應被激活,D對象對象需要等待需要等待14(3+2+5+4)個時間單位就應被)個時間單位就應被激活。激活。 v在當前時刻,如果有一個等待在當前時刻,如果有一個等待7個時間單位個時間單位的對象的對象E需要插入到隊列中,由于需要插入到隊列中,由于7-3-2=2,而而7-3-2-5=-3,因此,因此E對象需要插入到差分對象需要插入到差分鏈中介于對象鏈中介于對象B和對象和對象C之間的位置。之間的位置。 82時間管理時間管理 v對于差分時間鏈,系統每接收到一個對于差分時間鏈,系統

50、每接收到一個tick,就修訂鏈首對象的時間值。如,就修訂鏈首對象的時間值。如果鏈表對象的時間單位為果鏈表對象的時間單位為tick,則每,則每發生一個發生一個tick,鏈首對象的時間值就,鏈首對象的時間值就減減1,當減到,當減到0時,鏈首對象就被激活,時,鏈首對象就被激活,并從差分時間鏈中取下來,下一個對并從差分時間鏈中取下來,下一個對象又成為鏈首對象。象又成為鏈首對象。 83時間管理時間管理 v為實現定時功能,實時內核需要提供軟件定為實現定時功能,實時內核需要提供軟件定時器管理功能,應用程序可根據需要創建、時器管理功能,應用程序可根據需要創建、使用軟件定時器。使用軟件定時器。 軟件定時器在創建

51、時,由用戶提供定時值,當軟件定時器在創建時,由用戶提供定時值,當軟件定時器的定時值減法計數為軟件定時器的定時值減法計數為0時,觸發定時時,觸發定時器服務例程。器服務例程。 用戶可在此例程中完成自己需要的操作。用戶可在此例程中完成自己需要的操作。 在在tick處理程序中需要對軟件定時器的定時值進處理程序中需要對軟件定時器的定時值進行減行減1操作,并在定時值為操作,并在定時值為0時,觸發掛接在該時,觸發掛接在該定時器上的服務例程。定時器上的服務例程。 84時間管理時間管理 v軟件定時器可用于實現軟件定時器可用于實現“看門狗看門狗”(watchdog)。)。 在應用的某個地方進行軟件定時器的停止計時

52、在應用的某個地方進行軟件定時器的停止計時操作,確保定時器在系統正常運行的情況下不操作,確保定時器在系統正常運行的情況下不會到期,即不會觸發定時器服務例程;會到期,即不會觸發定時器服務例程; v如果某個時候系統進入了定時器服務例程,如果某個時候系統進入了定時器服務例程,就表示使用停止計時操作的地方沒有執行到,就表示使用停止計時操作的地方沒有執行到,系統出現了錯誤。系統出現了錯誤。 v如果需要進行任務的重調度,如果需要進行任務的重調度,tick處理程序處理程序還需要調用調度程序進行任務調度處理,使還需要調用調度程序進行任務調度處理,使需要執行的下一個任務獲得對需要執行的下一個任務獲得對CPU的控制

53、。的控制。 85時間管理時間管理 v在時間方面,內核通常提供以下功能:在時間方面,內核通常提供以下功能: 設置系統時間。使應用能夠設置當前系設置系統時間。使應用能夠設置當前系統的日期和時間。統的日期和時間。 獲得系統時間。以日歷時間、系統啟動獲得系統時間。以日歷時間、系統啟動以來所經歷的以來所經歷的tick數等形式獲得當前的系數等形式獲得當前的系統時間;統時間; 維護系統時基、處理定時事件。通過時維護系統時基、處理定時事件。通過時鐘中斷,維持系統日志時間、任務延遲鐘中斷,維持系統日志時間、任務延遲時間、超時、單調速率周期、實現時間時間、超時、單調速率周期、實現時間片等內容。片等內容。86日歷時

54、間數據結構日歷時間數據結構 vtypedef struct v v unsigned32 year; /* year*/ v unsigned32 month; /* month,1-12 */ v unsigned32 day; /* day,1-31 */ v unsigned32 hour; /* hour,0-23 */ v unsigned32 minute; /* minute,0-59 */ v unsigned32 second; /* second,0-59 */ v unsigned32 ticks; /* elapsed ticks between secs */ v TOD; /*Time Of Day*/87OSTimeGet and OSTimeSet Under uC/OS-II vINT32U OSTimeGet (void) v

溫馨提示

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

評論

0/150

提交評論