新人问几个问题,关于中断的写法

楼主
新人问几个问题,关于中断的写法
[P]问题一:[/P][P]我看有的例程里,中断有两种写法:[/P][P](1)interrupt[WDT_VECTOR] void WDT(void)[/P][P]     {[/P][P]     ...[/P][P]     }[/P][P](2)#pragma vector=WDT_VECTOR
     __interrupt void WDT(void)
     {
     ...[/P][P]     }[/P][P]这两种写法有什么不同?为什么我用第一种编译的时候,IAR会报错?[/P][P]Error[Pe077]: this declaration has no storage class or type specifier [/P][P] [/P][P] [/P][P]问题二:[/P][P]例程里有这么一句:[/P][P]_EINT();[/P][P]我在in430.h里找到了它的宏定义——#define _EINT()        __enable_interrupt()[/P][P]但是__enable_interrupt()到底执行了哪些操作?这个怎么也找不到啊。[/P]
1楼
[P]这种情况主要是你所看到的例子是基于IAR WE430早期版本的。
也就是说出错的原因是你抄了很老旧的例子中宏定义,所以在后期的编译器中才会出错。只要不用旧例子的中断宏声明可以了。[/P][P]其至_EINT();是指开断MCU的总中断使能的意思。由于你看到是旧的代码,所以在现在的编译器所带的.h文件中才找不到。[/P]
2楼
[P]果然大神啊,在别的论坛里问问题,一直没人回,微控网回得最及时了,向总版主致敬![/P][P] [/P][P]没错,我的IAR是最新5.5的。因为找不到别的破解版本。。。[/P][P](1)是不是在新版本里,中断宏声明只有后面那一种写法了?[/P][P](2)版主可不可以提供旧版的.h文件,我想看看_EINT();里的具体内容。[/P]
3楼
[P]据我印象,采用新式中断宏关键字应该在3.多版以后全采用新的了。[/P][P]你只要在微控论坛或TI官方网站都可以下载一些例子,这些例子都是采用新式的了。所以你没必要去找什么旧的.h文件。.h文件是装有旧的WE430系统才有的。估计现在也没有人用那么老的了。[/P][P]至于_EINT()新旧都有的。其实这部分变的不多,主要是中断的关键字不同;没你想的那么复杂...。[/P]
4楼
__enable_interrupt()执行了哪些操作,是不是把所有的外围模块的中断都打开了?执行_EINT()后我用到的外围模块不用中断方式,是不是还要把对应的中断关掉?例如串口发送中断。真想看一下__enable_interrupt()的代码。
5楼
[P]在《MSP430系列单片机实用C语言》中提到:[/P][P]1)对_EINT()的解释是:打开全局中断控制,使GIE=1;[/P][P]2)对__enable_interrupt()的解释是:使用NINT指令打开全局中断;[/P]

电脑版 Page created in 0.0620 seconds width 2 queries.