本帖最后由 lihui567 于 2019-3-15 12:42 编辑
先看第一个问题,这个也是参考中文论坛的源码学习的
先看Flash操作的简单流程
1、确定要写入Flash的首地址(稍后介绍确定地址的方法)
2、解锁Flash
3、对Flash进行操作(写入数据)
4、对Flash重新上锁
但是在实际项目中,直接操作FLASH地址的话,会导致单片机flash寿命大大降低,具体用啥方法呢,在官方给的优化文档中,采用虚拟地址的方法 意思就是如果变量是 16 位,则每个变量都占用 32 位( 16 位数据加 16 位虚拟地址),这意味着每次写入新数据时,各个变量分别使用 4 字节的 Flash 。也就是每个变量实际占用四个物理地址,每个 1 KB 页在变满之前可执行 256 次 变量写入。 看看项目中具体怎么用,还是以开发板为例,64K的flash,程序中我们选择后4k作为物理地址来存储数据 #define EEPROM_START_ADDRESS ((uint32_t)0x0800F000) /* EEPROM emulation start address: after 4KByte of used Flash memory */ 结束地址就是0x0800FFFF,就是4k的空间 程序刚开始需要对flash初始化,EE_Init()这个函数是必须的
|