新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM 中斷處理的安全性與高效性研究

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

        作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏




        下面假設(shè)任務(wù)切換是在SVC模式中運(yùn)行的。結(jié)合上面的分析,可以有圖3所示的保存任務(wù)切換的示意圖(虛線是壓棧保存,實(shí)線是彈棧恢復(fù);LR_Frame和 SPSR_Frame是變量區(qū))。

        結(jié)合圖3任務(wù)切換中斷處理中的步驟,可以用匯編語言寫出相對應(yīng)的中斷處理程序:




        4 可重入性中斷

        如果希望在處理中斷時(shí)仍能響應(yīng)其他中斷請求以此來縮短中斷延時(shí),就必須設(shè)計(jì)可重人性中斷。可重入性中斷是處理多個(gè)中斷的一種方法,但它也同時(shí)帶來新的問題。在IRQ中斷模式中,如果直接重新允許了IRQ中斷,此時(shí)因?yàn)閳?zhí)行一條BL指令而將子程序返回的地址保存在LR_irq中,而在此間中斷發(fā)生了。新來的中斷會(huì)將其返回地址裝入LR_irq中,此時(shí)舊中斷子程序的返回地址必將被覆蓋從而導(dǎo)致系統(tǒng)紊亂。此種情形是無法通過將LR_irq壓棧來解決的,如程序語句:



        但是仍不能排除在保存LR之前中斷發(fā)生的可能性。要解決上述LR_irq被破壞的問題,就必須切換處理器的模式,常見的是切換到SVC處理模式。在SVC 模式中,通過BL調(diào)用子程序時(shí)會(huì)將返回地址保存在LR_SVC之中。此時(shí)新中斷發(fā)生(因?yàn)樗鼤?huì)將返回地址保存到LR_irq而不是LR_SVC),不會(huì)破壞舊中斷中子程序返回地址了。有了基于上述的原理分析再來編寫可重入性中斷的代碼就思路清晰了。但是為了保證處理的高效性,盡可能地及早允許中斷以縮短延時(shí),在保存完LR_irq和SPSR_irq后,就馬上切換到SVC模式中并重新允許中斷,如圖4所示(虛線是壓棧保存,實(shí)線是彈棧恢復(fù))。



        結(jié)合圖4中的處理步驟,可以比較清晰地寫出可重入中斷處理的匯編語言程序:



        5 基于優(yōu)先級的可重入中斷

        在上面的可重人中斷中可能發(fā)生這種情形,某高優(yōu)先級中斷在中斷服務(wù)程序中因?yàn)橹匦略试S了中斷請求而被另一低優(yōu)先級中斷所打斷,于是高優(yōu)先級中斷不得不等到低優(yōu)先級中斷完畢后方可繼續(xù)運(yùn)行。這樣一來,高優(yōu)先級中斷服務(wù)的延遲將更加增大。


        關(guān)鍵詞: ARM中斷處理安全性高效

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 龙海市| 通州区| 青阳县| 大方县| 芦溪县| 乌鲁木齐市| 芒康县| 大同市| 社旗县| 日照市| 黑水县| 南投市| 鄢陵县| 南岸区| 龙里县| 宣武区| 庆阳市| 平利县| 六盘水市| 普格县| 渝中区| 汨罗市| 广汉市| 泌阳县| 长汀县| 台北县| 同心县| 鹰潭市| 霸州市| 石阡县| 宿州市| 盐亭县| 青龙| 潜山县| 奎屯市| 恩平市| 古蔺县| 湾仔区| 五大连池市| 禹州市| 荔波县|