#解释#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型的数据。