码迷,mamicode.com
首页 > 其他好文 > 详细

osal之添加中断向量

时间:2015-05-15 13:45:15      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:hal   compiler   向量   

添加中断向量

我们需要找到中断函数的定义,这个文件的名字叫做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) { 
....  //函数体 } 

osal之添加中断向量

标签:hal   compiler   向量   

原文地址:http://blog.csdn.net/jq_ak47/article/details/45742949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!