求助:#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

2019-10-12 14:07发布

原子哥资料上说    #define     GPIOA         ((GPIO_TypeDef *) GPIOA_BASE)    这句语句的意思是GPIOA指向
地址GPIOA_BASE(即0x40010800)。请问定义这条语句后GPIOA怎么就指向GPIOA_BASE(即0x40010800)了,
哪位大神能回答下啊?
或者解释下  ((GPIO_TypeDef *) GPIOA_BASE) 这个强制类型转换也可以啊。
谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
it_do_just
2019-10-13 05:16
首先GPIOA_BASE是常量,我们不能对常量进行操作,所以把它转为指针变量,前面你说根据基地址连续操作寄存器你能懂,那请问为什么能根据基地址进行操作?如果没有结构体,你只能把每个寄存器的地址常量都转为指针变量后再进行操作,但有了结构体后就不需要了,结构体有个特性,结构体的内存地址如果是对齐的话地址是连续的,刚好符合我们的操作需求,而且使这个地址有了范围,就像你把char类型强制转为了int类型,为什么就从1字节变成了4字节是一个道理,结构体代表的是一段内存空间,而你强制转换就是为这段空间取了个名字叫0x40010800,那么自然他的第一个元素就是0x40010800,就像数组名代表他的首地址一样,强烈建议学好C呀,C博大精深,自己也只会皮毛

一周热门 更多>