c語言學習筆記-解釋#define RCC ((RCC_TypeDef *) RCC_BASE)
阿新 • • 發佈:2021-01-04
#解釋#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是記憶體地址,所以通過強制型別轉換將數字轉為合適的地址型別。
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 ),是做了強制型別轉換,消除了潛在的警告。程式設計思想表述得更清晰。訪問