OpenEdv-开源电子网

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

stm32F030 const变量存储问题

[复制链接]

6

主题

7

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-5-2
在线时间
17 小时
发表于 2022-11-28 12:56:47 | 显示全部楼层 |阅读模式
10金钱
用stm32F030C8 keil MDK 定义一个不加volatile 修饰的 const 型 unsigned int  a=0xFFFF , 是存储在 Flash里的, 但如果程序里把a写 Flash操作,比如写成0x1234, 那么下次上电时程序不会从Flash里读,编译器优化,读到的仍然是a=0xFFFF,那么这个初始化的0xFFFF是存储在哪里的? 网上有资料说const 型是有存在编译器符号表里,有的说是存在内存的复制的副本,如果 const 型 要拷入内存副本,那用 const存一个大数组来节省内存不是无意义了吗?


最佳答案

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

凡是const,都是存储在FLASH里面的,你想改这个值,得写FLASH才行,否则是无法修改的!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-11-28 12:56:48 | 显示全部楼层
凡是const,都是存储在FLASH里面的,你想改这个值,得写FLASH才行,否则是无法修改的!
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2022-11-28 20:07:13 | 显示全部楼层
const int a应该是写在FLASH(或称ROM里的),
不可能在程序里改写的(编译会报错)。
除非你得到了a的FLASH存储地址,
使用写FLASH的方法进行改写。
否则,程序读到的永远是第一次编译时的a=0xFFFF

它不会在RAM里存放副本的,
所以用它定义大数组绝对可以节省内存。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

1

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1157
金钱
1157
注册时间
2019-3-13
在线时间
89 小时
发表于 2022-11-29 10:19:58 | 显示全部楼层
wwwwwwwwwwwwwwwwwwwwwwwwww
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 20:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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