stm8 的一段代码,求解释
#define STRINGVECTOR(x) #x
#define VECTOR_ID(x) STRINGVECTOR( vector = (x) )
#define INTERRUPT_HANDLER( a, b ) \
_Pragma( VECTOR_ID( (b)+2 ) ) \
__interrupt void (a)( void )
这段程序什么意思?求大神解答。
首先,我们需要了解C语言中的这三种基本用法:
/////////////////////////////////////
#pragma token-string
_pragma(" token-string ")
在MFC中这两个等价
/////////////////////////////////////
#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号
/////////////////////////////////////
define可以替代多行的代码
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个"\"
然后,我们就可以对下面这段代码进行解释了:
/////////////////////////////////////
#ifdef _IAR_
#define STRINGVECTOR(x) #x //STRINGVECTOR(x) "x"
#define VECTOR_ID(x) STRINGVECTOR( vector = (x) )
#define INTERRUPT_HANDLER( a, b ) \
_Pragma( VECTOR_ID( (b)+2 ) ) \ //#Pragma( VECTOR_ID( (b)+2 ) )
__interrupt void (a)( void )
等价于
#ifdef _IAR_
#Pragma vector = (b)+2
__interrupt void (a)(void)
其实在IAR中我们就是这样定义中断服务函数的:
/////////////////////////////////
#pragma vector=中断向量
__interrupt void 中断服务程序(void)
{
//中断处理程序
}