第一条
#define BITBAND(addr , bitnum) ((addr & 0xF0000000)+0x2000000+((addr
&0xFFFFF)<<5)+(bitnum<<2))
比如addr=0 bitnum=0,则BITBAND(addr, bitnum)=0&0xF0000000+0x2000000+(0&0xFFFFF)<<5……计算下去,结果其实就是一个16进制数
第二条
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
就是定义一个地址为addr的寄存器
第三条
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
结果这条其实就是把第一条计算出来的地址放在第二条里被定义成一个“以第一条数据为地址的寄存器”,又被定义成第三条BIT_ADDR(addr, bitnum)
不知道听懂了没有,个人理解
|