经常会见到如下的操作:
#define PINMUX3 *( volatile Uint32* )( 0x01C40000+ 0x0C )
PINMUX3 &= ~0x00600000;
这里对 ( volatile Uint32 )( 0x01C40000+ 0x0C )这句单独作出说明,( volatile Uint32* )这句是强制转换符,*的优先级是低于()的,所以会优先和( 0x01C40000+ 0x0C )相结合,强制将该地址转换成一个易变类型,放置编译对其进行优化,然后,再与 * 进行运算,相当于是:
int *p;
*p &= ~0x05; //PINMUX3 &= ~0x00600000;取得指针内的值,对其值进行与运算
这样就完成了对( 0x01C40000+ 0x0C )这个地址内的值进行一个“掩码”的操作。