新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM 中斷處理的安全性與高效性研究

        ARM 中斷處理的安全性與高效性研究

        作者: 時間:2016-12-02 來源:網絡 收藏
        引言

        在嵌入式系統中常用的RISC處理器是ARM核,它具有體積小、功耗低、成本低、性價比高的特點。然而,不管是哪種型號的ARM處理器,也無論該嵌入式系統中是否有操作系統,中斷處理,特別是IRQ中斷,始終是必須的,而中斷處理的核心問題是上下文的保存。能否安全而又高效地保存上下文,將影響一個嵌入式系統的性能與穩定。筆者對ARM處理器的普通中斷處理、任務切換中斷處理、可重人中斷處理和基于優先級的可重人性中斷處理的上下文保存技術進行分析與總結。為保證理論的正確性,核心的程序代碼都經過了實驗的檢測。

        1 系統中斷處理簡介

        ARM處理器的中斷主要有兩種:IRQ普通中斷和FIQ快速中斷。快速中斷本質上與普通中斷沒有太大的差別,它們在處理機制上有許多相同的地方。IRQ中斷是最頻繁的也是最為影響系統性能的,所以對它的研究與處理也就最有價值。

        下面簡要地介紹一下IRQ異常發生時ARM處理器的工作過程。在IRQ中斷發生時,ARM處理器的硬件會自動執行以下工作:

        ①將被中斷任務模式的CPSR值保存到IRQ模式中的SPSR寄存器中;
        ②將被中斷任務模式的PC值保存到IRQ模式中的LR寄存器中;
        ③將模式自動切換到IRQ模式,并將CPSR中的bit7位置1禁止后繼IRQ中斷的發生;
        ④PC被賦予0xl8的地址值,程序將從0xl8片開始執行。結合圖1,可以更好地理解ARM中斷處理機制的工作過程。



        2 普通中斷處理

        有些ARM嵌入式系統可能對中斷的要求比較低,即發生中斷后首先查詢相應的中斷源,然后進行中斷服務,最后從中斷服務程序中返回到被中斷處繼續運行程序。如何在這種簡單應用中保證安全又高效地處理中斷呢?“安全”就意味著中斷發生時上下文被完好保存不被破壞,“高效”就是說保存盡可能少的寄存器(當然是建立在安全的基礎上的)。由圖1可知,在普通中斷處理中,中斷服務就可以在IRQ模式中運行。根據ATPCS的調用規則,在子程序調用中ARM編譯器保存了 R4~R11寄存器,因此就沒有必要再次保存。那么剩下的寄存器就必須予以保存,防止從中斷服務程序返回后被破壞。可以用匯編語言和C語言書寫處理代碼。

        首先假設初始化代碼中已正確建立了IRQ堆棧。



        <所有已使能中斷的查詢與服務>
        ;將同時發生的中斷全部服務,以提高效率
        LDMFD SP!,{R0-R3,R12,R14} ;恢復上下文

        在上述保存上下文中沒有必要保存SPSR。因在非嵌套的中斷處理程序中,它不會被任何順序的中斷所破壞。

        ①保存.ATPCS規定的被破壞的寄存器;
        ②保存其他中斷處理程序中用到的寄存器;
        ③同時將(LR-4)賦予程序計數器PC,實現中斷程序的返回并且恢復CPSR寄存器的內容。

        普通中斷處理的C語言程序可以按如下格式編寫:



        可見,無論是用C語言還是匯編語言來編寫,它們的工作原理都是一樣的。圖2給出了普通中斷處理過程中,ARM寄存器的保存示意圖(虛線是壓棧保存,實線是彈棧恢復)。圖中與程序處理的步驟相對應,可以幫助理解處理器上下文的保存過程。



        3 任務切換

        有操作系統的嵌入式系統中,中斷的發生要求保存全部寄存器的內容到任務的棧中,它不是基于安全的考慮是因為可能中斷會導致任務的切換。任務切換發生時所有任務的寄存器的值都要保存到該任務的棧中。下個任務的上下文將從該任務棧中得以恢復到處理器的寄存器中。下面就本問題作出分析并給出實現的程序代碼。從圖 1中斷處理寄存器的保存可知,中斷發生后任務的CPSR和PC兩寄存器的值在IRQ模式的SPSR和LR中,所以不能簡單地切換到任務運行的模式中,否則被中斷任務返回時的CPSR和PC將不可見(因為它們保存在IRQ模式的專用寄存器中,在其他模式中無法操作)。此時,可以考慮設置一些變量區作為媒介,將其予以轉存到任務運行模式的棧中去。

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 云和县| 利川市| 神农架林区| 蓝山县| 青州市| 岳池县| 阿巴嘎旗| 筠连县| 湟中县| 曲周县| 乌拉特中旗| 东光县| 孝义市| 临城县| 积石山| 黑龙江省| 客服| 萨迦县| 民勤县| 石门县| 江西省| 深州市| 宣威市| 通河县| 鄯善县| 昌乐县| 施甸县| 清流县| 临澧县| 景泰县| 海阳市| 荆门市| 谢通门县| 浙江省| 烟台市| 武鸣县| 天等县| 南阳市| 竹山县| 凤阳县| 拜泉县|