微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm8 的一段代码,求解释

stm8 的一段代码,求解释

时间:10-02 整理:3721RD 点击:
#ifdef _IAR_
#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)
{
//中断处理程序
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top