久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

KEIL C51的#pragma NOIV

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
CYRESS給出的USB例程,在periph.c中普遍在開(kāi)頭一行加了下列編譯指令:
#pragma NOIV

它的注釋是,不產(chǎn)生中斷向量。查找C51手冊(cè),說(shuō)明如下:

NOINTVECTOR Compiler Directive

Abbreviation

NOIV

本文引用地址:http://cqxgywz.com/article/201611/320372.htm
Arguments

None.

Default

INTVECTOR (0)

µVision

Options —C51— Interrupt vectors at address.

Description

TheNOINTVECTORdirective inhibits interrupt vector generation. This flexibility allows the user to provide interrupt vectors with other programming tools.

See Also

INTERVAL,INTVECTOR

Example
C51SAMPLE.C NOINTVECTOR 
#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í)際上,在程序開(kāi)頭加上#pragma NOIV,表示該文件使用的中斷函數(shù)統(tǒng)統(tǒng)不遵循上述缺省的中斷向量分配,而是自行分配中斷向量,自行分配中斷優(yōu)先級(jí)。
這樣才有了大量的USB函數(shù)采用interrupt 0的寫(xiě)法:
void ISR_Ep2eflag(void) interrupt 0;
void ISR_Ep4eflag(void) interrupt 0;
這樣的寫(xiě)法,人為地把所有USB中斷當(dāng)成了最高優(yōu)先級(jí)的中斷0。(缺省的中斷0只有WAKEUP/WU2引腳或者USB喚醒,其它25個(gè)USB中斷是中斷8)
從這一設(shè)置可以看出,位于該文件中的其它中斷,也要人為地約定中斷號(hào)。我的經(jīng)驗(yàn)是,不如把其它類(lèi)型的中斷,如定時(shí)器,外部中斷等,寫(xiě)到其它文件,只要這個(gè)文件不包含#pragma noiv,那么該文件中的中斷還是可以使用缺省中斷的(僅僅中斷0被USB占用,其它都可用)。
另外C51中斷語(yǔ)句后的using不用也罷!實(shí)在是沒(méi)時(shí)間搞清68013和老51在這一部分的差別,不加的最壞可能是效率的降低,這個(gè)要查看匯編代碼才能了解,不用就好了。


關(guān)鍵詞: KEILC51NOI

評(píng)論


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

關(guān)閉