打印

结构体指针为何这么写?

[复制链接]
2048|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
entepino|  楼主 | 2012-2-21 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


/* Reset the RCC clock configuration to the default reset state(for debug purpose) */

/* Set HSION bit */


RCC->CR |= (uint32_t)0x00000001;

查找RCC

#define RCC
((RCC_TypeDef *) RCC_BASE)

查找RCC_TypeDef:是一个结构体

查找RCC_BASE

#define RCC_BASE
(AHBPERIPH_BASE + 0x1000)


查找AHBPERIPH_BASE
#define AHBPERIPH_BASE
(PERIPH_BASE + 0x20000)


查找PERIPH_BASE
#define PERIPH_BASE
((uint32_t)0x40000000) /*!< Peripheral base address in the bit-band region */



结构体指针为何这么写??这样写,有什么好处?这是厂家自带的文件,是这样定义的。
为何用define进行结构体指针变量定义,这样可以吗?
Struct
RCC_TypeDef * RCC;

RCC = & RCC_BASE.

相关帖子

沙发
xyz769| | 2012-2-21 19:15 | 只看该作者
RCC_BASE是一个立即数,取它的地址可能没有意义。

RCC 在编译期就能确定的,没有必要定义成变量。

LZ对指针还比较糊涂,建议多阅读别人的代码,增加功力。

使用特权

评论回复
板凳
sunhq02| | 2012-2-22 08:38 | 只看该作者
你的写法中:
     Struct
RCC_TypeDef * RCC;
RCC = & RCC_BASE.
第二句,是不对的,RCC_BASE不能取地址
,可以用类似的写法,但是得写成  RCC=((RCC_TypeDef *) RCC_BASE)

后面这样写是合法的,但是和厂家的代码比,缺点是必须给RCC分配一块内存,RCC是一个变量
而厂家的写法是考虑到整个代码中RCC不会再发生改变了,写成宏的话,可以省下3个字节

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
原野之狼 + 2 我很赞同
地板
airwill| | 2012-2-22 09:22 | 只看该作者
这种写法习惯, 开始我也感觉别扭.
定义的方式有很多, 但是编译的效率上是有点区别的.
其实, 通常应用. 能看明白怎么回事就行了.

使用特权

评论回复
5
yewuyi| | 2012-2-22 09:48 | 只看该作者
用define后可以将比较长的名字,看起来比较吃力,容易导致眼花的名字换个自己比较容易记,容易写,方便写的名字,至少可以少打字,可以避免打字出错等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

649

帖子

2

粉丝