添加中断向量
我们需要找到中断函数的定义,这个文件的名字叫做hal_mcu.h,
,我们可以看到很多宏定义,其中Compiler Abstraction部分代码如下:
/* ------------------------------------------------------------------------------------------------ * Compiler Abstraction
* ------------------------------------------------------------------------------------------------ */
/* ---------------------- IAR Compiler ---------------------- */ #ifdef __IAR_SYSTEMS_ICC__ //条件定义 #include //包含CC2430输入输出头文件
#define HAL_COMPILER_IAR //定义IAR编译器宏
#define HAL_MCU_LITTLE_ENDIAN() __LITTLE_ENDIAN__ //定义MCU小端模式
#define _PRAGMA(x) _Pragma(#x) //定义预处理指令宏
#define HAL_ISR_FUNC_DECLARATION(f,v) _PRAGMA(vector=v) __near_func __interrupt void f(void) //IAR中断函数声明定义格式宏
#define HAL_ISR_FUNC_PROTOTYPE(f,v) _PRAGMA(vector=v) __near_func __interrupt void f(void) //IAR中断函数原型定义格式宏
#define HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v) //IAR中断函数定义格式宏
/* ---------------------- Keil Compiler ---------------------- */
#elif defined __KEIL__ #include
#define HAL_COMPILER_KEIL
#define HAL_MCU_LITTLE_ENDIAN() 0
#define HAL_ISR_FUNC_DECLARATION(f,v) void f(void) interrupt v #define HAL_ISR_FUNC_PROTOTYPE(f,v) void f(void)
#define HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)
/* ------------------ Unrecognized Compiler ------------------ */ #else
#error "ERROR: Unknown compiler." #endif
这里定义了在不同编译环境下的终端函数,我们可以看出ZigBee2006协议栈仅支持IAR和Keil两种编译环境,其他的编译器会当做未识别的编译器并报错(”ERROR: Unknown compiler.”)。我使用的是IAR编译环境,并对上面的代码进行注释。 用红色字体标出的部分就是我们定义中断函数的格式要求,这三个宏的意思表明了对中断函数定义的规则:首先,要在文件代码顶端进行函数声明(格式:_PRAGMA(vector=v) __near_func __interrupt void f(void););然后,在相应的C文件里定义中断函数原型(格式:
_PRAGMA(vector=v) __near_func __interrupt void f(void){…})。其实和C语言中定义函数一模一样,但是格式要按照协议栈规定的来写。 例如:
#include "ioCC2430.h"
_PRAGMA(vector=URX0_VECTOR) __near_func __interrupt void UART0_ISR(void); ...
_PRAGMA(vector=URX0_VECTOR) __near_func __interrupt void UART0_ISR(void) {
.... //函数体 }
原文地址:http://blog.csdn.net/jq_ak47/article/details/45742949