KEIL C51的#pragma NOIV
#pragma NOIV
它的注释是,不产生中断向量。查找C51手册,说明如下:
NOINTVECTOR Compiler Directive
Abbreviation | NOIV |
Arguments | None. |
Default | INTVECTOR (0) |
µVision | Options — |
Description | The |
See Also | INTERVAL, |
Example | C51 #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在这一部分的差别,不加的最坏可能是效率的降低,这个要查看汇编代码才能了解,不用就好了。
KEILC51NOI 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)