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

2019-07-20 20:11发布

#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是指针变量,可以对指针变量进行“->”操作
希望高手解答一下,不胜感激!


0条回答

一周热门 更多>