[ZLG-ARM] 请教一下CAN总线数据类型的语法

[复制链接]
1969|1
 楼主| jlsong1983 发表于 2007-12-13 17:38 | 显示全部楼层 |阅读模式
CAN总线实验中,定义数据类型如下:<br />typedef&nbsp;union&nbsp;_canmod_<br />{<br />UINT32&nbsp;Word;<br />struct&nbsp;{<br />UINT32&nbsp;RM_BIT&nbsp;:1;&nbsp;//定义RM&nbsp;位<br />UINT32&nbsp;LOM_BIT&nbsp;:1;&nbsp;//定义LOM&nbsp;位<br />UINT32&nbsp;STM_BIT&nbsp;:1;&nbsp;//定义STM&nbsp;位<br />UINT32&nbsp;TPM_BIT&nbsp;:1;&nbsp;//定义TPM&nbsp;位<br />UINT32&nbsp;SM_BIT&nbsp;:1;&nbsp;//定义SM&nbsp;位<br />UINT32&nbsp;RPM_BIT&nbsp;:1;&nbsp;//定义RPM&nbsp;位<br />UINT32&nbsp;RSV_BIT1&nbsp;:1;&nbsp;//保留位<br />UINT32&nbsp;TM_BIT&nbsp;:1;&nbsp;//定义TM&nbsp;位<br />UINT32&nbsp;RSV_BIT24&nbsp;:24;&nbsp;//保留位<br />}Bits;<br />}uCANMod,*P_uCANMod;<br />#define&nbsp;CANMOD(CanNum)&nbsp;(*((volatile&nbsp;P_uCANMod)&nbsp;(CANMOD_BADR+CanNum*&nbsp;CAN_OFFSET_ADR)))<br />我的理解是:<br />(volatile&nbsp;P_uCANMod)&nbsp;(CANMOD_BADR+CanNum*&nbsp;CAN_OFFSET_ADR)是数字强制转换为地址,那么之后再*()又是怎么理解的,难道是取出地址中的数据吗?<br />还有CANMOD(CanNum)代表的是结构体的首地址吗?
 楼主| jlsong1983 发表于 2007-12-16 15:42 | 显示全部楼层

自己解答

当时有指向结构体或联合的指针对结构体或联合进行操作时,可以用(*p).num或p-&gtnum两种方式,而此处用法是CANMOD(CanNum).Bits.RM_bit,所以要加上*
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

90

帖子

1

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