如何防止程序将作为数据的flash覆盖?

[复制链接]
668|2
手机看帖
扫描二维码
随时随地手机跟帖
ee168|  楼主 | 2022-11-11 17:01 | 显示全部楼层 |阅读模式
本帖最后由 ee168 于 2022-11-11 17:03 编辑

这个题目在不同的单片机和不同的编译器或有不同

我现在是Keil Arm,STM32F103为例 其flash Page0-127,共128个页面,每个页面1k
将页面Page127,即地址 0x0801FC00开始的1k做数据存储器使用

现在程序比较小,远小于128k,所以烧写时采用扇区擦除,没有动到Page127的页面上,相安无事
但是程序编译中没有指名这个位置不能被程序占用,就有可能将程序写到这个区域

我曾尝试 建立  unsigned char FlashData[1024] _at_ 0x0801FC00;  但是编译通不过,

那些什么扇区保护没有看懂,保护了,在什么情况下不能擦除,我程序内部读写这个扇区是不是也会因保护而不能使用?而且在烧写程序时,这个选项经常被遗忘,操作也比较麻烦。

使用特权

评论回复
ee168|  楼主 | 2022-11-11 17:12 | 显示全部楼层
本帖最后由 ee168 于 2022-11-11 17:15 编辑

以STM32F407为例,共8个扇区 Page0-3为16k,Page4 64k;Page5-7 128k
Page0是不能作为数据区来使用的吧,因为中断向量都写在哪里,比如我要使用Page1,地址0x0800C000后的16k作为数据来使用,该如何做呢,因为编译程序时不加以说明话,这段肯定会被放入程序。

使用特权

评论回复
jack821119| | 2022-11-12 14:05 | 显示全部楼层
unsigned char FlashData[1024] _at_ 0x0801FC00; 这样的定义肯定编译不通过的。最后一个扇区作为数据存储区,写操作需要解锁才行。只要你的程序不会超过127K ,那编译器就肯定不会 将代码放到最后一个扇区。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

196

帖子

2

粉丝