请教指针问题
typedef union_canier_{
INT32U Word; //字操作定义
struct
{
INT32U RIE:1; //接收中断使能位
INT32U TIE1:1; //TxBUF1发送完成中断使能位
INT32U EIE:1; //错误报警中断使能位
INT32U DOIE:1; //数据溢出中断使能位
INT32U WUIE:1; //睡眠模式唤醒中断使能位
INT32U EPIE:1; //错误认可中断使能位
INT32U ALIE:1; //仲裁丢失中断使能位
INT32U BEIE:1; //总线错误中断使能位
INT32U IDIE :1; //接收到CAN标识符中断使能位
INT32U TIE2:1; //TxBUF2发送完成中断使能位
INT32U TIE3 :1; //TxBUF3发送完成中断使能位
INT32U RSV21 :21;//保留位
}Bits;
}uCANIER,*P_uCANIER;
#defineCANIER(CanNum)(*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))
最后一句是什么意思? 最后一句,定义了一个带参数的宏。可以向CanNum这个参数写不同的数值来寻址不同的寄存器。
比如: CANIER(0x01) = 0x12345678; 带参数的宏,正解。 这个现象很常见,比如CAN控制器有一堆寄存器,按照他们的顺序定义一个数据结构,把1号CAN的最小寄存器地址做为基址,然后通过这种方式就很方便访问2号CAN的寄存器啦,主要的理解在于宏后面的指针强制转换
http://www.zssmcu.com 正解
页:
[1]