打印

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

[复制链接]
292|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
棋王高手|  楼主 | 2018-7-28 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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是指针变量,可以对指针变量进行“->”操作
希望高手解答一下,不胜感激!

使用特权

评论回复

相关帖子

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

本版积分规则

378

主题

378

帖子

0

粉丝