zigbee协议栈 中断服务函数定义方法

zigbee协议栈 中断服务函数定义方法

我们先看协议栈中 hal_uart.c 文件中的串口操作中断服务程序:

HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )      //uart0  接收

HAL_ISR_FUNCTION( halUart1RxIsr, URX1_VECTOR )      //uart1  接收

HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )      //uart0  发送

HAL_ISR_FUNCTION( halUart1TxIsr, UTX1_VECTOR )      //uart1  发送

这四个是 uart0 和uart1 的串口接收和发送中断服务程序,下面是协议栈定义中断服务程序的方法。我们看一下 hal_mcu.h 文件:

#define HAL_ISR_FUNC_PROTOTYPE(f,v)    _PRAGMA(vector=v) __near_func __interrupt void f(void)

#define HAL_ISR_FUNCTION(f,v)           HAL_ISR_FUNC_PROTOTYPE(f,v);

从这两个#define 的定义可以了解到:

HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )按照定义展开来就是:

_PRAGMA(URX0_VECTOR) __near_func __interrupt void halUart0RxIsr(void);

其中_PRAGMA 是编译器预定义的声明中断服务程序的一个方法,URX0_VECTOR 是中断编号(在

ioCC2530.h文件中定义)。halUart1TxIsr就是f所指的函数,也就是我们的中断服务函数。


常规中断服务函数定义:

#pragma vector = T3_VECTOR      //定时器 T3

__interrupt void T3_ISR(void) 

协议栈中的定义:

_PRAGMA(URX0_VECTOR) __near_func __interrupt void halUart0RxIsr(void);

注解:

_PRAGMA(URX0_VECTOR)            //定义中断向量

__near_func                                 //IAR的特殊字

__interrupt                                   //中断函数标志

void  halUart0RxIsr(void);            //halUart0RxIsr  函数名


补充:


#define HAL_ISR_FUNC_DECLARATION(f,v)   \

    _PRAGMA(vector=v) __near_func __interrupt void f(void)


#define HAL_ISR_FUNC_PROTOTYPE(f,v)     \

    _PRAGMA(vector=v) __near_func __interrupt void f(void)


#define HAL_ISR_FUNCTION(f,v)           \

    HAL_ISR_FUNC_PROTOTYPE(f,v);    \

HAL_ISR_FUNC_DECLARATION(f,v)


还有这样的定义,第一个是函数声明,第二个是函数原型,第三个是函数定义,这三个不能少一个。

你可能感兴趣的:(zigbee)