求助:为何不能擦除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条回答
513393302@qq.co
2019-10-16 22:45
不太明白楼主的问题   
如果想指定CONST数组的地址    请这样表示
const u8 TEXT_Buffer[100]  __attribute__((at(0x08010000)))  ={"STM32 FLASH TEST"};  
如果想擦除这个数组所在的数据,需要如下操作
1、得到需要擦除的扇区的地址   (绝对地址)
2、FLASH解锁
3、调用FLASH外设库中 STMFLASH_EraseSector(ADDR) 函数  ,用于擦除这个扇区
4、FLASH加锁


注意:在执行擦除FLASH及编程FLASH函数时,必须先执行FLASH解锁,否则会出现编程错误且FLASH不再允许擦除及编程操作,直到下次复位。当执行复位时FLASH的编程错误标记会清零

一周热门 更多>