解释#define RCC ((RCC_TypeDef *) RCC_BASE)

#define RCC  ((RCC_TypeDef *) RCC_BASE)
RCC_TypeDef是一个定义的结构体
RCC_BASE是一个unsigned long(32位数值)

简化后是:(int *) 0xb8000000.
明显,指针是一个存放地址的变量,
int a=1;
int *p=&a;
a与*p是同一个体!

在stm32你是知道RCC寄存器的地址的如0xb8000000,并且目的是用指针指向这个地
很自然会有:
int *p;
p=0xb8000000;
但是0xb8000000是一个整数,编译器不知0xb8000000是内存地址,所以通过强制类型转换将数字转为合适的地址类型。
则,int *p;
p=(int *)0xb8000000;
这样P就装有一个地址,
#define RCC  ((RCC_TypeDef *) RCC_BASE)
RCC  就指向是RCC_BASE这个地址
从RCC_BASE开始,长度为RCC_TypeDef这个类型的长度!

其实
int *p;
p=0xb8000000;

int *p;
p=(int *)0xb8000000;
没有多大区别,都实现同样的功能。
前者由于p是int *类型,所以给p赋值0xb8000000时会作默认类型转换,有些编译器也许会有警告。但访问*p时也会得到int型的数据。
后者加上了(int *),是做了强制类型转换,消除了潜在的警告。编程思想表述得更清晰。访问*p同样是得到int型的数据。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值