找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10048|回復(fù): 5
收起左側(cè)

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

[復(fù)制鏈接]
ID:59583 發(fā)表于 2014-3-26 15:34 | 顯示全部樓層 |閱讀模式
#define RCC  ((RCC_TypeDef *) RCC_BASE)
RCC_TypeDef是一個(gè)定義的結(jié)構(gòu)體
RCC_BASE是一個(gè)unsigned long(32位數(shù)值)
簡(jiǎn)化后是:(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開始,長(zhǎng)度為RCC_TypeDef這個(gè)類型的長(zhǎng)度!
其實(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ù)。

回復(fù)

使用道具 舉報(bào)

ID:152913 發(fā)表于 2017-6-19 15:59 | 顯示全部樓層
nt a=1; int *p=&a; a與*p是同一個(gè)體!    這里錯(cuò)了  *p你前面存的是a的地址,所以給a分配人的存儲(chǔ)內(nèi)容是1,而*p存儲(chǔ)的是a的地址,不是a的內(nèi)容,所以兩個(gè)不是一回事
回復(fù)

使用道具 舉報(bào)

ID:152913 發(fā)表于 2017-6-19 16:01 | 顯示全部樓層
總體很好  贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:271772 發(fā)表于 2018-1-6 10:36 | 顯示全部樓層
也就是說:P就是RCC,RCC_Typedef*就相當(dāng)于int*,RCC_BASE就相當(dāng)于0xb8000000。 (RCC_TypeDef *) 相當(dāng)于(int*)強(qiáng)制類型轉(zhuǎn)換。
回復(fù)

使用道具 舉報(bào)

ID:271772 發(fā)表于 2018-1-6 10:41 | 顯示全部樓層
#define RCC ((RCC_TypeDef *) RCC_BASE)

int *p;
p=0xb8000000;

RCC 相當(dāng)于 p;
RCC_TypeDef * 相當(dāng)于 int*;
RCC_BASE 相當(dāng)于0xb8000000;
回復(fù)

使用道具 舉報(bào)

ID:18591 發(fā)表于 2019-1-20 21:02 | 顯示全部樓層

下載學(xué)習(xí),謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表