在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 不同編譯器中斷函數(shù)的表示方法

            不同編譯器中斷函數(shù)的表示方法

            作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            1.keil51單片機(jī)中斷函數(shù)表示:

            void 函數(shù)名() interrupt n using n
            {
            …….
            }

            其中函數(shù)名可以任意取,關(guān)鍵字interrupt用來指明這是一個中斷服務(wù)函數(shù),后面的n表示中斷號,關(guān)鍵字using加后面的n表示使用哪一組寄存器。

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

            2.GCC for AVR,對于中斷函數(shù)支持兩種關(guān)鍵字ISR與SIGNAL,其格式如下:
            ISR(vect)
            {
            ………
            }

            SIGNAL(vect)
            {
            ……..
            }
            其中的vect就是中斷向量名,根據(jù)不同的型號的AVR單片機(jī)的不同的中斷源都會有相對應(yīng)的中斷向量名,比如外部中斷0對于ISR格式的中斷向量名為INT0_vect,對SIGNAL則為SIG_INTERRUPT0。

            3.IAR C430 for MSP430

            interrupt [vect] void 函數(shù)名(void)
            {
            …….
            }
            其中vect也是中斷向量名,函數(shù)名可以任取。

            4.IAR for AVR

            在IAR編譯器里用關(guān)鍵字來__interrupt來定義一個中斷函數(shù)。用#pragma vector來提供中斷函數(shù)的入口地址
            #pragma vector=0x12//定時器0溢出中斷入口地址
            __interrupt void time0(void)
            {
            ;
            }
            上面的入口地址寫成#pragma vector=TIMER0_OVF_vect更直觀,每種中斷的入口地址在頭文件里有描述。函數(shù)名稱time0可以為任意名稱。中斷函數(shù)會自動保護(hù)局部變量,但不會保護(hù)全局變量

            在IAR for SAMSUNG s3c9234中中斷函數(shù)只有一個入口0x00,中斷的優(yōu)先級有軟件來定。
            #pragma vector=0x00
            __interruptvoid itp(void)
            {
            if(MARCO_READ_TIMER_PEND) //讀相應(yīng)中斷標(biāo)志位
            {
            MARCO_CLEAR_TIMER_PEND;//清相應(yīng)的中斷標(biāo)志位
            .....
            }
            if(MARCO_READ_WATCHTIMER_PEND)
            {
            MARCO_CLEAR_WATCHTIMER_PEND;

            .....
            }

            .....

            }
            5.ICC for AVR

            #pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF
            void timer0_ovf_isr(void)
            {
            TCNT0 = 0x00 /*INVALID SETTING*/; //reload counter value
            }

            6.AVR GCC for AVR

            由于C語言設(shè)計目標(biāo)為硬件無關(guān),因此各種編譯器在處理中斷時使用的方法都是編譯器設(shè)計者自己的方法。
            在AVR-GCC環(huán)境里,向量表已經(jīng)預(yù)先定義,并指向具有預(yù)定義名稱的中斷例程。通過使用合適的名稱,用戶例程就可以由相應(yīng)的中斷所調(diào)用。如果用戶沒有定義自己的中斷例程,則器件庫的缺省例程被加入。
            除了中斷向量表的問題,編譯器還必須處理相關(guān)寄存器保護(hù)的問題。中斷API解決了細(xì)節(jié)問題。用戶只要將中斷例程定義為INTERRUPT()或SIGAL()即可。而對于用戶沒有定義的中斷,缺省例程的處理是reti指令。
            函數(shù)定義可參見interrupt.h,中斷信號符號表參見sig-avr.h。
            6.1 cli
            用法:void cli(void);
            說明:通過置位全局中斷屏蔽位來禁止中斷。其編譯結(jié)果僅為一條匯編指令
            6.2 enable_external_int
            用法:void enable_external_int(uint8_t ints);
            說明:此函數(shù)訪問GIMSK寄存器(對于MEGA器件則是EIMSK寄存器)。功能與宏outp()一樣。
            6.3 INTERRUPT
            用法:INTERRUPT(signame)
            說明:定義中斷源signame對應(yīng)的中斷例程。在執(zhí)行時,全局屏蔽位將清零,其他中斷被使能。ADC結(jié)束中斷例程的例子如下所示:
            INTERRUPT(SIG_ADC)
            {
            }
            6.4 sei
            用法:void sei(void);
            說明:通過清零全局中斷屏蔽位來使能中斷。其編譯結(jié)果僅為一條匯編指令。
            6.5 SIGNAL
            用法:SIGNAL(signame)
            說明:定義中斷源signame對應(yīng)的中斷例程。在執(zhí)行時,全局屏蔽位保持置位,其他中斷被禁止。ADC結(jié)束中斷例程的例子如下所示:
            SIGNAL(SIG_ADC)
            {
            }
            6.6 timer_enable_int
            用法:void timer_enable_int(uint8_t ints);
            說明:此函數(shù)操作TIMSK寄存器。也可以通過outp()來設(shè)置。



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

            評論


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

            關(guān)閉