看你代码,感觉有些问题的,我来说一下吧,
1、这个函数是按字节保存的,FLASH模拟E2PROM,不同于真正的E2PROM,不能按字节擦除,所以改写一个字节,也要擦除一页数据,这时就要在RAM中备份该页不需要改写的数据,然后再擦除整页,再将备份的数据以及要改写的字节写入到该页FLASH中。如果有多个数据需要改写,最好不要用这种按字节保存的函数,要自己写一个按块保存的函数,这样多个变量保存也只需要擦写一次,减少擦写次数。
2、你现在选的备份XRAM区域是0x80~0xFF,建议选到0x280~0x2FF,如果你定义XRAM变量很多,超过0x80,可能会导致程序异常。当然,如果你超过了0x280个XRAM区域变量,一样会有问题。要限定自己的XRAM区域的变量个数。
3、看一下数据手册,擦写FLASH的时候,需不需关中断,这个我有点忘了。
总之,要搞清楚原理,不要迷信官方例程,谁也不能保证没有问题。
|