请教指针问题

[复制链接]
 楼主| jlgcumt 发表于 2009-12-14 18:03 | 显示全部楼层 |阅读模式
CAN, AN, ni, TI, ui
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;
#define  CANIER(CanNum)  (*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))

最后一句是什么意思?
arm_fan168 发表于 2009-12-15 08:37 | 显示全部楼层
最后一句,定义了一个带参数的宏。可以向CanNum这个参数写不同的数值来寻址不同的寄存器。
比如: CANIER(0x01) = 0x12345678;
gooogleman 发表于 2009-12-25 11:07 | 显示全部楼层
带参数的宏,正解。
zssmcu 发表于 2010-1-6 19:53 | 显示全部楼层
这个现象很常见,比如CAN控制器有一堆寄存器,按照他们的顺序定义一个数据结构,把1号CAN的最小寄存器地址做为基址,然后通过这种方式就很方便访问2号CAN的寄存器啦,主要的理解在于宏后面的指针强制转换
http://www.zssmcu.com
wbh9527 发表于 2010-3-29 21:37 | 显示全部楼层
正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:善攻者,动于九天之上,善守者,藏于九地之下!

183

主题

733

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部