STM32/STM8技术论坛
直播中

贾虎世

7年用户 1710经验值
私信 关注
[问答]

从哪里可以得到const常量所在的地址?

小弟最近好郁闷,在51里面不存在这个问题,在STM32(IAR)编译时出错了
const  u8  a;
u8 *addr=a;                   //此处提示错误
printf("address=%x",addr);

51里面直接&a 地址就出来了,M3里面怎么得到a的地址都不行。各位有啥好办法没

回帖(15)

张敏

2018-11-6 16:08:39
一样的。
unsigned int aa = (unsigned int)&a;
举报

张燕

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




举报

王芳

2018-11-6 16:09:30

不行,你们说的都不对,在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:UsersAdministratorDesktop新板实验SOFT-0817Usermain.c 16


举报

张涛

2018-11-6 16:09:44
u8 *addr=a; 改成这样试试 u8 const *addr  = a;或者 const u8 *addr = a;
举报

王超

2018-11-6 16:09:55
这个还真不知道,是不是固定的flash段
举报

王艳

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

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

刘艳

2018-11-6 16:10:17
你的回答完全正确。类型检查很严格,不能把地址复制给变量,必须强制转换成同类型的
举报

王敏

2018-11-6 16:10:27
你要把类型检查搞成最严格那就没法转换。
举报

王敏

2018-11-6 16:10:33
因为任何形式的转换都不允许。
举报

王静

2018-11-6 16:10:44
unsigned int aa = (unsigned int)&a;
举报

王丽

2018-11-6 16:10:55
多多尝试啊,或者看帮助文件。
举报

李秀兰

2018-11-6 16:11:08
还有那个const类型应该在Flash里面,不在内存。
举报

张秀兰

2018-11-6 16:11:32
二楼的那个是读取地址的命令吗
举报

李辉

2018-11-6 16:11:43
只要格式可能不一致的必须强制转换,不然编译器不给你过。
举报

王辉

2018-11-6 16:12:29
取地址运算符就行
举报

更多回帖

发帖
×
20
完善资料,
赚取积分