<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          KEIL C51的#pragma NOIV

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
          CYRESS給出的USB例程,在periph.c中普遍在開頭一行加了下列編譯指令:
          #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 —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í)際上,在程序開頭加上#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è)要查看匯編代碼才能了解,不用就好了。


          關(guān)鍵詞: KEILC51NOI

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();