您的位置 首页 电路

KEIL C51的#pragma NOIV

CYRESS给出的USB例程,在periphc中普遍在开头一行加了下列编译指令:pragmaNOIV它的注释是,不产生中断向量。查找C51手册,说明如下:N

CYRESS给出的USB例程,在periph.c中遍及在最初一行加了下列编译指令:
#pragma NOIV

它的注释是,不发生中止向量。查找C51手册,阐明如下:

NOINTVECTOR Compiler Directive

Abbreviation

NOIV

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 

它的意思是,不发生8051缺省的中止向量。对68013A来说,缺省的中止有13个,别离摆放在中止向量表,坐落内存0x0003~0x0063,默许优先级0~12。一般在编译选项里预留出0x80以下的内存,便是供这个中止向量表运用。
实际上,在程序最初加上#pragma NOIV,表明该文件运用的中止函数通通不遵从上述缺省的中止向量分配,而是自行分配中止向量,自行分配中止优先级。
这样才有了很多的USB函数选用interrupt 0的写法:
void ISR_Ep2eflag(void) interrupt 0;
void ISR_Ep4eflag(void) interrupt 0;
这样的写法,人为地把一切USB中止当成了最高优先级的中止0。(缺省的中止0只需WAKEUP/WU2引脚或许USB唤醒,其它25个USB中止是中止8)
从这一设置能够看出,坐落该文件中的其它中止,也要人为地约好中止号。我的经历是,不如把其它类型的中止,如定时器,外部中止等,写到其它文件,只需这个文件不包括#pragma noiv,那么该文件中的中止仍是能够运用缺省中止的(只是中止0被USB占用,其它都可用)。
别的C51中止句子后的using不必也罢!实在是没时间搞清68013和老51在这一部分的不同,不加的最坏可能是功率的下降,这个要检查汇编代码才干了解,不必就好了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/261293.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部