OpenEdv-开源电子网

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

STM32关于全局变量地址的问题

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-7-20
在线时间
50 小时
发表于 2021-4-21 11:30:07 | 显示全部楼层 |阅读模式
10金钱
大家好,有个关于变量地址的问题请教一下各位:

我定义了一个全局变量 A,然后编译器在 RAM 里自动分配了一个地址给 A,我不想用这个地址,然后用 __attribute__((section(".ARM.__at_0x20000000"))) 语句给 A 手动指定了一个地址 0x20000000,这样做有没有什么风险?我再定义一个全局变量 B,编译器还会把 0x20000000 这个地址给 B 吗?

最佳答案

查看完整内容[请看2#楼]

keil里面指定变量地址的方式是int var __attribute__((at(0x20008000))); 链接时会首先放那些强制指定地址的变量,然后剩余的变量按链接脚本依序排布,不会出现某两个变量被安排到同一个地址的情况。 如果强行指定两个变量为同一个地址,或者两个变量/数组强行指定地址后有重叠,那链接不会通过,直接报错
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-4-21 11:30:08 | 显示全部楼层
keil里面指定变量地址的方式是int var __attribute__((at(0x20008000)));

链接时会首先放那些强制指定地址的变量,然后剩余的变量按链接脚本依序排布,不会出现某两个变量被安排到同一个地址的情况。
如果强行指定两个变量为同一个地址,或者两个变量/数组强行指定地址后有重叠,那链接不会通过,直接报错
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-4-21 11:40:53 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 02:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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