KEIL C51的#pragma NOIV
#pragma NOIV
它的注釋是,不產(chǎn)生中斷向量。查找C51手冊(cè),說(shuō)明如下:
NOINTVECTOR Compiler Directive
Abbreviation | NOIV 本文引用地址:http://www.ex-cimer.com/article/201611/320372.htm |
Arguments | None. |
Default | INTVECTOR (0) |
µVision | Options — |
Description | The |
See Also | INTERVAL, |
Example | C51 #pragma noiv |
它的意思是,不產(chǎn)生8051缺省的中斷向量。對(duì)68013A來(lái)說(shuō),缺省的中斷有13個(gè),分別排列在中斷向量表,位于內(nèi)存0x0003~0x0063,默認(rèn)優(yōu)先級(jí)0~12。一般在編譯選項(xiàng)里預(yù)留出0x80以下的內(nèi)存,就是供這個(gè)中斷向量表使用。
實(shí)際上,在程序開頭加上#pragma NOIV,表示該文件使用的中斷函數(shù)統(tǒng)統(tǒng)不遵循上述缺省的中斷向量分配,而是自行分配中斷向量,自行分配中斷優(yōu)先級(jí)。
這樣才有了大量的USB函數(shù)采用interrupt 0的寫法:
void ISR_Ep2eflag(void) interrupt 0;
void ISR_Ep4eflag(void) interrupt 0;
這樣的寫法,人為地把所有USB中斷當(dāng)成了最高優(yōu)先級(jí)的中斷0。(缺省的中斷0只有WAKEUP/WU2引腳或者USB喚醒,其它25個(gè)USB中斷是中斷8)
從這一設(shè)置可以看出,位于該文件中的其它中斷,也要人為地約定中斷號(hào)。我的經(jīng)驗(yàn)是,不如把其它類型的中斷,如定時(shí)器,外部中斷等,寫到其它文件,只要這個(gè)文件不包含#pragma noiv,那么該文件中的中斷還是可以使用缺省中斷的(僅僅中斷0被USB占用,其它都可用)。
另外C51中斷語(yǔ)句后的using不用也罷!實(shí)在是沒(méi)時(shí)間搞清68013和老51在這一部分的差別,不加的最壞可能是效率的降低,這個(gè)要查看匯編代碼才能了解,不用就好了。
評(píng)論