打印
[ZLG-ARM]

请教一下CAN总线数据类型的语法

[复制链接]
1508|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlsong1983|  楼主 | 2007-12-13 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN总线实验中,定义数据类型如下:
typedef union _canmod_
{
UINT32 Word;
struct {
UINT32 RM_BIT :1; //定义RM 位
UINT32 LOM_BIT :1; //定义LOM 位
UINT32 STM_BIT :1; //定义STM 位
UINT32 TPM_BIT :1; //定义TPM 位
UINT32 SM_BIT :1; //定义SM 位
UINT32 RPM_BIT :1; //定义RPM 位
UINT32 RSV_BIT1 :1; //保留位
UINT32 TM_BIT :1; //定义TM 位
UINT32 RSV_BIT24 :24; //保留位
}Bits;
}uCANMod,*P_uCANMod;
#define CANMOD(CanNum) (*((volatile P_uCANMod) (CANMOD_BADR+CanNum* CAN_OFFSET_ADR)))
我的理解是:
(volatile P_uCANMod) (CANMOD_BADR+CanNum* CAN_OFFSET_ADR)是数字强制转换为地址,那么之后再*()又是怎么理解的,难道是取出地址中的数据吗?
还有CANMOD(CanNum)代表的是结构体的首地址吗?

相关帖子

沙发
jlsong1983|  楼主 | 2007-12-16 15:42 | 只看该作者

自己解答

当时有指向结构体或联合的指针对结构体或联合进行操作时,可以用(*p).num或p->num两种方式,而此处用法是CANMOD(CanNum).Bits.RM_bit,所以要加上*

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

90

帖子

1

粉丝