色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          arm中system模式的作用

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          這幾天學(xué)了很多arm細(xì)節(jié)知識(shí),個(gè)人平時(shí)實(shí)在沒(méi)有深入進(jìn)去

          交了錢(qián)被人逼著學(xué)才會(huì)努力深究,真是賤

          以前就知道arm有7種基本工作模式
          FIQ 、IRQ由中斷進(jìn)入
          UNDEF、ABORT 由程序異常進(jìn)入
          SVC由上電和軟中斷進(jìn)入
          user由SVC處理程序主動(dòng)進(jìn)入
          但是還有一個(gè)system,使用和user相同的寄存器,但是又沒(méi)有SPSR,同時(shí)還能執(zhí)行特權(quán)指令
          這么一個(gè)另類(lèi),OS把它當(dāng)user用不安全,當(dāng)異常和中斷,又沒(méi)有自動(dòng)進(jìn)入方式
          怎么看怎么別扭,當(dāng)然這也是領(lǐng)悟之后才意識(shí)到的,system是用來(lái)解決arm中中斷可重入問(wèn)題的

          搜了一下,網(wǎng)上的關(guān)于arm可重入中斷的解釋只有1篇,而且沒(méi)有考慮完全http://blog.chinaunix.net/u1/58640/showart_513501.html
          默認(rèn)的中斷處理函數(shù)都會(huì)自己先主動(dòng)把lr壓棧先,此文沒(méi)有考慮這一點(diǎn),把破壞想的嚴(yán)重了

          本文引用地址:http://cafeforensic.com/article/201611/317862.htm

          這樣的理論知識(shí)實(shí)踐中幾乎沒(méi)有用到,唯有追求專(zhuān)業(yè)的人士才會(huì)深究,這樣就能滿(mǎn)足特殊要求,做到一般人做不到的事情

          首先,armcc關(guān)鍵字__irq不能用來(lái)編寫(xiě)可重入中斷
          當(dāng)中斷可重入時(shí),在中斷處理函數(shù)中使用 BL 調(diào)用子函數(shù),這時(shí)候問(wèn)題就來(lái)了,分兩種情況
          如果子函數(shù)不是__irq 方式申明的,沒(méi)有自己壓棧lr的習(xí)慣,那么此時(shí)再來(lái)一個(gè)irq中斷,lr_irq就被新值沖掉
          ,從此陷入一個(gè)死循環(huán)。
          如果子函數(shù)是會(huì)主動(dòng)壓棧lr的好孩子,那么僅僅在執(zhí)行壓棧lr的這條指令時(shí),發(fā)生irq中斷才會(huì)導(dǎo)致上述問(wèn)題,但是觸發(fā)問(wèn)題的條件就變得很苛刻了

          所以,這時(shí)候就需要system模式來(lái)拯救世界了
          編寫(xiě)可重入中斷必須借助以下匯編代碼

          IRQHandler
          ;LR_IRQ ,SPSR_IRQ,r12壓棧,避免下一個(gè)IRQ中斷將其沖掉
          sub lr,lr,#4
          stmfd sp!,{lr}
          mrs r14,spsr
          STMFD sp!,{r12,r14}

          ;讀、清中斷控制器中斷源
          ;省略相關(guān)代碼
          mov r12,#IntBase
          LDR r12,[r12,#IntSource]

          ;切換到system模式,同時(shí)使能IRQ
          mrs r14,cpsr
          bic r14,r14,#0x9f
          orr r14,r14,#0x1f
          msr CPSR_c,r14

          ;保存r0-r3,LR_user到user棧中,然后調(diào)用c子程序,中斷源r0最為一個(gè)參數(shù)傳進(jìn)c處理函數(shù)
          BL C_irq_handler ;看名字,就知道這個(gè)c程序是__irq形式申明的
          ;是一個(gè)會(huì)自己壓棧LR的好孩子
          LDMFD sp!,{r0-r3,lr}

          ;切換到IRQ模式同時(shí)禁止IRQ
          mrs r12,cpsr
          bic r12,r12,#0x1f
          orr r12,r12,#0x92
          msr CPSR_c,r12

          ;恢復(fù)LR_irq,SPSR_irq和工作寄存器r12,然后退出IRQ
          LDMFD sp!,{r12,r14}
          msr SPSR_csxf,r14
          LDMFD sp!,{PC}^



          關(guān)鍵詞: armsystem模

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉