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//中断函数标志
voidhalUart0RxIsr(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协议栈 中断服务函数定义方法】还有这样的定义,第一个是函数声明,第二个是函数原型,第三个是函数定义,这三个不能少一个。
推荐阅读
- 程序员客栈TOP收入的萌系开发者心得|程序员客栈TOP收入的萌系开发者心得 - 雨晴
- C语言进阶栈帧示例详解教程
- (八)签协议
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- 计算机网络|计算机网络——DHCP协议详解
- Java深入了解数据结构之栈与队列的详解
- Java积累|Java积累 - 堆和栈
- javaEmail一(传输协议简介)
- SDP协议
- FTP创建