在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Realview MDK中編譯器對(duì)中斷處理的過(guò)程詳解

            Realview MDK中編譯器對(duì)中斷處理的過(guò)程詳解

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            在ARM程序的開發(fā)過(guò)程中,對(duì)中斷的處理是很普遍的、也是相當(dāng)重要的。Realview MDK使用的RVCT編譯器提供了__irq關(guān)鍵字,用此關(guān)鍵字修飾的函數(shù)被作為中斷出來(lái)函數(shù)編譯,即在編譯的過(guò)程中,編譯器會(huì)自動(dòng)添加中斷處理過(guò)程中現(xiàn)場(chǎng)保護(hù)和恢復(fù)的代碼,減小程序的開發(fā)難度,加快軟件的開發(fā)過(guò)程。

            在理解__irq關(guān)鍵字的作用之前,先看一下ARM核對(duì)異常的處理過(guò)程。當(dāng)產(chǎn)生異常時(shí), ARM核拷貝CPSR寄存器的內(nèi)容SPSR_寄存器中,同時(shí)設(shè)置適當(dāng)?shù)腃PSR 位、改變處理器狀態(tài)進(jìn)入ARM 態(tài)和處理器模式,從而進(jìn)入相應(yīng)的異常模式。在設(shè)置中斷禁止位禁止相應(yīng)中斷(如果需要)后,ARM核保存返回地址到LR_,同時(shí)設(shè)置PC為相應(yīng)的異常向量。當(dāng)異常返回時(shí), 異常處理需要從SPSR_寄存器中恢復(fù)CPSR的值,同時(shí)從LR_恢復(fù)PC,具體的異常返回指令如下:

            本文引用地址:http://www.biyoush.com/article/201611/317259.htm

            ? 從SWI和Undef異常返回時(shí)使用:

            movs pc, LR;

            ? 從FIQ、IRQ和預(yù)取終止返回時(shí)使用:

            SUBS PC, LR,#4;

            ? 從數(shù)據(jù)異常返回時(shí)使用:

            SUBS PC, LR,#8

            在使用上述指令異常返回時(shí),如果LR之前被壓棧的話使用LDM “∧”, 例如:

            LDMFD SP!, {PC}∧

            理解了ARM異常處理的過(guò)程以后,Realview MDK中__irq關(guān)鍵字的作用就容易理解了。下面的函數(shù)為一個(gè)中斷處理函數(shù),其前面加了__irq關(guān)鍵字。

            __irq void pwm0_irq_handler(void)

            {

            //Deassert PWM0 interrupt signal

            unsigned int i=AT91F_PWMC_GetInterruptStatus(AT91C_BASE_PWMC);

            // Clear the LEDs. On the Board we must apply a "1" to turn off LEDs

            AT91F_PIO_SetOutput(AT91C_BASE_PIOA, led_mask[0]);

            AT91F_PWMC_StopChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID1);

            AT91F_AIC_ClearIt(AT91C_BASE_AIC,AT91C_ID_PWMC);

            AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);

            }

            當(dāng)編譯器器編譯這個(gè)函數(shù)時(shí),除了保存ATPCS規(guī)則規(guī)定的寄存器以外,還保存了CPSR及PC的值。在函數(shù)的返回時(shí),還自動(dòng)添加了SUBS PC, LR, #4和從SPSR寄存器恢復(fù)CPSR寄存器值的指令。用這種方式處理以后,中斷處理函數(shù)可以和普通函數(shù)一樣的使用。

            注意:中斷處理都是在ARM模式下進(jìn)行的,當(dāng)源程序欲編譯成Thumb指令時(shí),這時(shí),用__irq關(guān)鍵字修飾的函數(shù)仍然會(huì)被編譯成ARM指令。如果源程序編譯成在CORTEX M3上運(yùn)行的指令時(shí),關(guān)鍵字__irq對(duì)函數(shù)的編譯沒(méi)有任何影響,即編譯器不會(huì)自動(dòng)保存CPSR及PC的值,也不會(huì)添加SUBS PC, LR, #4和從SPSR寄存器恢復(fù)CPSR寄存器值的指令,因?yàn)镃ORTEX M3處理器硬件會(huì)自動(dòng)處理這些問(wèn)題,無(wú)需軟件開發(fā)人員關(guān)心。



            關(guān)鍵詞: RealviewMDK編譯器中斷處

            評(píng)論


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

            關(guān)閉