[STM32F1] IO口管脚内存地址定义时的问题

[复制链接]
1192|7
 楼主| lgq_123 发表于 2015-5-14 08:56 | 显示全部楼层 |阅读模式
定义IO口管脚内存地址常量时 ,为什么不直接使用其首地址呢?
为什么要以下边这样写,
#define PERIPH_BASE           ((uint32_t)0x40000000)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOA               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
下边这样写不好吗?
#define GPIOA               ((GPIO_TypeDef *) 0x40010800)
#define GPIOA_IDR_Addr         0x40010808
myxiaonia 发表于 2015-5-14 09:02 | 显示全部楼层
这更能体现外设在地址空间的分布情况,一般同一个外设寄存器都放在一起
aozima 发表于 2015-5-14 09:46 | 显示全部楼层
一串数字豪无毫无意义,地址加偏移量方便块复制。
比如再新增一组GPIO。
diweo 发表于 2015-5-14 10:24 | 显示全部楼层
这样写的话自己一看就清楚什么规律。

对编译器没什么影响,因为预处理器会先转换成数值结果。
 楼主| lgq_123 发表于 2015-5-14 16:35 | 显示全部楼层
myxiaonia 发表于 2015-5-14 09:02
这更能体现外设在地址空间的分布情况,一般同一个外设寄存器都放在一起

多谢指点,
 楼主| lgq_123 发表于 2015-5-14 16:36 | 显示全部楼层
aozima 发表于 2015-5-14 09:46
一串数字豪无毫无意义,地址加偏移量方便块复制。
比如再新增一组GPIO。

多谢指点,
 楼主| lgq_123 发表于 2015-5-14 16:36 | 显示全部楼层
diweo 发表于 2015-5-14 10:24
这样写的话自己一看就清楚什么规律。

对编译器没什么影响,因为预处理器会先转换成数值结果。 ...

多谢指点,
 楼主| lgq_123 发表于 2015-5-14 16:37 | 显示全部楼层
diweo 发表于 2015-5-14 10:24
这样写的话自己一看就清楚什么规律。

对编译器没什么影响,因为预处理器会先转换成数值结果。 ...

多谢指点,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

103

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部