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

[复制链接]
1634|17
 楼主| happy_10 发表于 2018-11-2 18:30 | 显示全部楼层 |阅读模式
小弟最近好郁闷,在51里面不存在这个问题,在STM32(IAR)编译时出错了
const  u8  a;
u8 *addr=a;                   //此处提示错误
printf("address=%x",addr);

51里面直接&a 地址就出来了,M3里面怎么得到a的地址都不行。各位有啥好办法没
gongche 发表于 2018-11-2 18:33 | 显示全部楼层
一样的。
unsigned int aa = (unsigned int)&a;
huwr 发表于 2018-11-2 18:36 | 显示全部楼层
楼主是取址符没加啊,51直接 &a,32也一样是直接 &a 就可以了
const u8 a;
u8 *addr = &a;
printf("address=%x",addr);
 楼主| happy_10 发表于 2018-11-2 18:41 | 显示全部楼层
不行,你们说的都不对,在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
huanghuac 发表于 2018-11-2 18:45 | 显示全部楼层
u8 *addr=a; 改成这样试试 u8 const *addr  = a;或者 const u8 *addr = a;
bqyj 发表于 2018-11-2 18:47 | 显示全部楼层
这个还真不知道,是不是固定的flash段
wenfen 发表于 2018-11-2 18:50 | 显示全部楼层

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

不是不行,是类型检查更严格了,不同类型的都必须加强制类型转换
 楼主| happy_10 发表于 2018-11-2 18:55 | 显示全部楼层
你的回答完全正确。类型检查很严格,不能把地址复制给变量,必须强制转换成同类型的
chenho 发表于 2018-11-2 18:58 | 显示全部楼层
你要把类型检查搞成最严格那就没法转换。
zwll 发表于 2018-11-2 19:02 | 显示全部楼层
因为任何形式的转换都不允许。
juventus9554 发表于 2018-11-2 19:06 | 显示全部楼层
unsigned int aa = (unsigned int)&a;
llljh 发表于 2018-11-2 19:11 | 显示全部楼层
多多尝试啊,或者看帮助文件。
stly 发表于 2018-11-2 19:13 | 显示全部楼层

还有那个const类型应该在Flash里面,不在内存。
 楼主| happy_10 发表于 2018-11-2 19:16 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽
晓伍 发表于 2018-11-6 12:02 | 显示全部楼层
二楼的那个是读取地址的命令吗
小灵通2018 发表于 2018-11-6 12:52 | 显示全部楼层
只要格式可能不一致的必须强制转换,不然编译器不给你过。
wowu 发表于 2018-11-6 15:53 | 显示全部楼层
取地址运算符就行
xiaoqizi 发表于 2018-11-6 17:06 | 显示全部楼层
直接进行读取吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

744

主题

7973

帖子

6

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