OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4116|回复: 0

#define RCC ((RCC_TypeDef *) RCC_BASE)疑问

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-9-9
在线时间
1 小时
发表于 2016-9-9 15:27:21 | 显示全部楼层 |阅读模式
#define RCC  ((RCC_TypeDef *) RCC_BASE)
RCC_TypeDef是一个定义的结构体如下:
typedef struct
{
  __IO uint32_t CR;
  __IO uint32_t CFGR;
  __IO uint32_t CIR;
  __IO uint32_t APB2RSTR;
       .
       .
       .     //删除部分代码
} RCC_TypeDef;


RCC_BASE 就是0x40021000,注意这里0x40021000是个整数不是个指针,而RCC_BASE是个常量不是个变量
那么上边那句等于#define RCC  ((RCC_TypeDef *) 0x40021000)
0x40021000这个整数强制类型转换为(RCC_TypeDef *)型,也就是上面这个结构体类型指针(地址),那么问题来了#define RCC  ((RCC_TypeDef *) 0x40021000)
不就是把0x40021000指针常量用RCC 代替吗???(define用法上这样说的)论坛里有人说RCC是个指向RCC_TypeDef结构体的指针变量,而我认为它就是个指针常量,只不过这个指针常量0x40021000是RCC_TypeDef结构体首地址而已。 如果是指针常量
那一下这些代码  
RCC->CR |= (uint32_t)0x00000001;
RCC->CFGR &= (uint32_t)0xF8FF0000;
可以对指针常量进行“->”操作???????????


如果是以下代码那就很容易明白
#define RCC  ((RCC_TypeDef *) 0x40021000)
RCC_TypeDef *    P;
P = RCC;
P->CR |= (uint32_t)0x00000001;
P->CFGR &= (uint32_t)0xF8FF0000;
因为P是指针变量,可以对指针变量进行“->”操作
希望高手解答一下,不胜感激!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 07:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表