pragma命令
- pragma命令作为C语言中的预编译命令
- 使用方法: #pragma [option] 内容
- #pragma message(“info”) 编译器编译到此处打印相应文本info信息
- #pragma error “error” 编译器编译到此处产生错误并打印错误error信息
- #pragma inline [=forced | never] 编译时将指令后面的函数内联到调用它的函数的函数体中
- 当#pragma inline = forced,强制编译器对函数内联,内联不成功,发出警告消息
- 当#pragma inline = never,编译器不对函数内联
- #pragma location = {address | register | NAME} 指令将之后的全局或静态变量指定到address、register或NAME上
#include <msp430f169.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD + WDTNMI + WDTNMIES; // WDT off NMI hi/lo
P6DIR |= 0x01; // Set P1.0 to output direction
P6OUT |= 0x01; // Clear P1.0 LED off
IE1 |= NMIIE; // Enable NMI
LPM0; // Enter LPM0
}
#pragma vector=NMI_VECTOR
__interrupt void nmi_ (void){
volatile unsigned int i;
P6OUT |= 0x01; // Set P1.0 LED on
for (i = 50000; i > 0; i--); // Delay
P6OUT ^= 0x01; // Clear P1.0 LED off
IFG1 &= ~NMIIFG; // Reclear NMI flag in case bounce
IE1 |= NMIIE; // Enable NMI
}
代码说明,第14~24行是中断函数:
- 第14行是将vector和NMI_VECTOR关联
- 第15~24行是中断函数的具体实现
- 第15行中的函数头部分:
- __interrupt是中断函数的必须要的修饰
- void是必须的,中断函数不能返回值
- nmi_函数名称是可以根据需要修改的,一般是和中断源关联,加上interrupt service routine的简写(ISR),这里最好写作nmi_ISR
- void是必须的,要求中断函数不传参数
中断向量见图: