求助:为何不能擦除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
2019-10-15 23:31
正点原子 发表于 2016-12-25 23:29
你这个flash数据,很可能和代码有重叠,你擦除,很容易把代码都给擦了...
所以检查下是不是这个问题吧

IAR下解决,把那个勾上去就可以了;Keil暂没有时间验证;
1. 因为是自己建立的工程,默认是不勾选的。 总之,与代码没有问题,是最后一步下载的问题。
2. 不知道为何新建工程(默认是不勾选那个选项的)的情况下const修饰的变量为何不能擦除,
    但库提供的工程也是默认不勾选的,他就可以擦除const修饰的变量
3. 建议大家点击Edit进去看下地址范围,防止越界

一周热门 更多>