|
#define RCC ((RCC_TypeDef *) RCC_BASE)
RCC_TypeDef是一個(gè)定義的結(jié)構(gòu)體
RCC_BASE是一個(gè)unsigned long(32位數(shù)值)
簡化后是:(int *) 0xb8000000.
明顯,指針是一個(gè)存放地址的變量,
int a=1;
int *p=&a;
a與*p是同一個(gè)體!
在stm32你是知道RCC寄存器的地址的如0xb8000000,并且目的是用指針指向這個(gè)地
很自然會(huì)有:
int *p;
p=0xb8000000;
但是0xb8000000是一個(gè)整數(shù),編譯器不知0xb8000000是內(nèi)存地址,所以通過強(qiáng)制類型轉(zhuǎn)換將數(shù)字轉(zhuǎn)為合適的地址類型。
則,int *p;
p=(int *)0xb8000000;
這樣P就裝有一個(gè)地址,
#define RCC ((RCC_TypeDef *) RCC_BASE)
RCC 就指向是RCC_BASE這個(gè)地址
從RCC_BASE開始,長度為RCC_TypeDef這個(gè)類型的長度!
其實(shí)
int *p;
p=0xb8000000;
和
int *p;
p=(int *)0xb8000000;
沒有多大區(qū)別,都實(shí)現(xiàn)同樣的功能。
前者由于p是int *類型,所以給p賦值0xb8000000時(shí)會(huì)作默認(rèn)類型轉(zhuǎn)換,有些編譯器也許會(huì)有警告。但訪問*p時(shí)也會(huì)得到int型的數(shù)據(jù)。
后者加上了(int *),是做了強(qiáng)制類型轉(zhuǎn)換,消除了潛在的警告。編程思想表述得更清晰。訪問*p同樣是得到int型的數(shù)據(jù)。
|
|