打印
[STM32F1]

如何知道const常量所在的地址?

[复制链接]
1512|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海际天涯|  楼主 | 2017-8-19 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近好郁闷,在51里面不存在这个问题,在STM32(IAR)编译时出错了
const  u8  a;
u8 *addr=a;                   //此处提示错误
printf("address=%x",addr);

51里面直接&a 地址就出来了,M3里面怎么得到a的地址都不行。各位有啥好办法没
沙发
戈卫东| | 2017-8-19 14:14 | 只看该作者
一样的。
unsigned int aa = (unsigned int)&a;

使用特权

评论回复
板凳
Xflyan| | 2017-8-19 15:00 | 只看该作者
楼主是取址符没加啊,51直接 &a,32也一样是直接 &a 就可以了
const u8 a;
u8 *addr = &a;
printf("address=%x",addr);

使用特权

评论回复
地板
海际天涯|  楼主 | 2017-8-20 15:07 | 只看该作者
不行,你们说的都不对,在51 keil里面可以 在STM32 IAR中 CONST变量与51的code要求不同
会提示
Error[Pe144]: a value of type "u16 const *" cannot be used to initialize an entity of type "u16 *" C:\Users\Administrator\Desktop\新板实验SOFT-0817\User\main.c 16

使用特权

评论回复
5
feelhyq| | 2017-8-20 22:57 | 只看该作者
u8 *addr=a; 改成这样试试 u8 const *addr  = a;或者 const u8 *addr = a;

使用特权

评论回复
6
gygp| | 2017-8-20 23:17 | 只看该作者
这个还真不知道,是不是固定的flash段

使用特权

评论回复
7
Xflyan| | 2017-8-21 00:40 | 只看该作者
海际天涯 发表于 2017-8-20 15:07
不行,你们说的都不对,在51 keil里面可以 在STM32 IAR中 CONST变量与51的code要求不同
会提示
Error: a va ...


楼主是取址符没加啊,51直接 &a,32也一样是直接 &a 就可以了
const u8 a;
u8 *addr = (u8 *)&a;
printf("address=%x",addr);

不是不行,是类型检查更严格了,不同类型的都必须加强制类型转换

使用特权

评论回复
8
海际天涯|  楼主 | 2017-8-24 01:27 | 只看该作者
Xflyan 发表于 2017-8-21 00:40
楼主是取址符没加啊,51直接 &a,32也一样是直接 &a 就可以了
const u8 a;
u8 *addr = (u8 *)&a;

你的回答完全正确。类型检查很严格,不能把地址复制给变量,必须强制转换成同类型的

使用特权

评论回复
9
戈卫东| | 2017-8-24 08:28 | 只看该作者
你要把类型检查搞成最严格那就没法转换。
因为任何形式的转换都不允许。

使用特权

评论回复
10
w522930954| | 2017-8-24 10:22 | 只看该作者
IAR在XXXX.icf文件中可以设置,固定住位置。keil没试过

使用特权

评论回复
11
henglin| | 2017-8-24 10:28 | 只看该作者
up

使用特权

评论回复
12
Brand2| | 2017-8-26 17:11 | 只看该作者
unsigned int aa = (unsigned int)&a;

使用特权

评论回复
13
yiy| | 2017-8-26 17:27 | 只看该作者
多多尝试啊,或者看帮助文件。

使用特权

评论回复
14
yiy| | 2017-8-26 17:28 | 只看该作者
还有那个const类型应该在Flash里面,不在内存。

使用特权

评论回复
15
usstwk| | 2017-9-2 10:43 | 只看该作者

使用特权

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

本版积分规则

55

主题

105

帖子

1

粉丝