求助:为何不能擦除const 修饰的变量的区域

2019-10-15 22:25发布

本帖最后由 SCREA 于 2016-12-20 15:04 编辑

比如F103ZET6.程序体在0x0800 0000 ~ 0x0800 FFFF内
[mw_shl_code=c,true]const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
const u8 buf[100] @ 0x0801 0000 = {1,2,3,4,5};
const u8 *p = buf;

STMFLASH_Write((u32)p,(u32*)TEXT_Buffer,100);[/mw_shl_code]
Debug发现 怎么也不能擦除复写buf区域----那100个字节。


============
上传原子工程,感兴趣的可以试试,const修饰的变量绝对不是想擦哪就擦哪(当前只试过F103、407、L0XX)
若是你没试过,就不要凭感觉回答否定我的结论

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
SCREA
1楼-- · 2019-10-15 23:31
正点原子 发表于 2016-12-25 23:29
你这个flash数据,很可能和代码有重叠,你擦除,很容易把代码都给擦了...
所以检查下是不是这个问题吧

IAR下解决,把那个勾上去就可以了;Keil暂没有时间验证;
1. 因为是自己建立的工程,默认是不勾选的。 总之,与代码没有问题,是最后一步下载的问题。
2. 不知道为何新建工程(默认是不勾选那个选项的)的情况下const修饰的变量为何不能擦除,
    但库提供的工程也是默认不勾选的,他就可以擦除const修饰的变量
3. 建议大家点击Edit进去看下地址范围,防止越界
止天
2楼-- · 2019-10-16 02:36
const 写在flash里面  不能更改     改flash的话一擦一页
SCREA
3楼-- · 2019-10-16 06:43
止天 发表于 2016-12-20 09:20
const 写在flash里面  不能更改     改flash的话一擦一页

问题是擦都不能擦,你试试?
止天
4楼-- · 2019-10-16 06:44
    FLASH_ErasePage(ADDR);

用这个擦出    谁一般把变量设置成常数都不会去更改的
zc123
5楼-- · 2019-10-16 07:09
 精彩回答 2  元偷偷看……
憨厚诚实大叔
6楼-- · 2019-10-16 07:52
楼主喜欢就好,都打算改变还用const。
自己写一个擦除的函数就知道可不可以擦除了。

一周热门 更多>