如何看懂IAR里面头文件的未定义部分代码?
最近在学习AVR,使用的开发环境是IAR,在参考一些资料和看了IAR开发环境提供个help文档之后,基本上可以把内部资源都调试成功,发现,IAR里面的位操作挺方便,但是自己打开头文件去看IAR是如何实现这种位操作的,但就是看不懂,所以就来这里向高手请教,以下是IAR头文件里面的一部分代码特殊功能寄存器PORTA的定义如下
SFR_B_N(0x1B,PORTA,PORTA7,PORTA6,PORTA5,PORTA4,PORTA3,PORTA2,PORTA1,PORTA0)
SFR_B_N是一个宏,使用goto definition 可以看到其定义如下:
#define SFR_B_N(_ADDR, _NAME, _B7, _B6, _B5, _B4, _B3, _B2, _B1, _B0) \
SFR_B_BITS_N(_NAME, _ADDR, \
Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7, \
_B0,_B1,_B2,_B3,_B4,_B5,_B6,_B7)
然后继续使用goto definition发现SFR_B_BITS_N的宏定义代码如下:
#define SFR_B_BITS_N(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
__io union { \
unsigned char _NAME; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
};\
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
};\
} @ _ADDR;
继续。。。。__BYTEBITS的goto definition代码为:
#define __BYTEBITS(_NAME,_A,_B,_C,_D,_E,_F,_G,_H) \
unsigned char _NAME ## _ ## _A:1, \
_NAME ## _ ## _B:1, \
_NAME ## _ ## _C:1, \
_NAME ## _ ## _D:1, \
_NAME ## _ ## _E:1, \
_NAME ## _ ## _F:1, \
_NAME ## _ ## _G:1, \
_NAME ## _ ## _H:1;
到这里就不能再往下进行goto definiton了,最终我还是看不懂这部分代码是如何实现位操作的,
这个问题很是困扰,因为我用IAR开发S3C2410的时候发现里面的头文件也是这样定义的,我猜这应该是IAR的一种风格吧
希望高手可以帮小弟解决问题呀
万分感谢!!!!!!!!!! 这些代码都是和编译器有关的,其实不必去纠结,像这种宏定义你只要知道功能就行了, 一直用 KEIL C51, 最近学 EWAVR 我看到这里面的代码也头大, 上网查, 查到这里来了。 看不懂,这个和我们编程影响不大吧。 请问iar下s3c2410的启动文件有吗?最好有工程模板,能给我发一份吗?1183557534@qq.com,谢谢了 看不懂的,都补习下C语言的宏定义就全明白了,提示:The `##' preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token
页:
[1]