打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
KEIL C51的#pragma NOIV
        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

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

See Also

INTERVAL, INTVECTOR

Example
C51 SAMPLE.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在这一部分的差别,不加的最坏可能是效率的降低,这个要查看汇编代码才能了解,不用就好了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
interrupt 和 using 在C51中断中的使用
AVR单片机C语言的使用特点
VxWorks下MPC860的中断处理机制及其应用
linux中断源码分析2/4--初始化
IAR学习(杂项)
C语言在8051单片机上的扩展(interrupt、using关键字的用法)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服