由于FLASH写入次数和写入擦除等待时间等方面的约束,FLASH变量和FLASH计数器很难构成. 因为有'0'不能变'1'的束缚,所以FLASH变量不可以定位到某个存储单元地址上. 同理FLASH计数器也一样.
仔细分析"FLASH二次写入技术"后不难看出,若稍做变通,就可实现真正的FLASH变量和FLASH计数器.
计数器是每次遇到它都+/- 1,那么为什么不能每次清除1位变成"计次器"呢??? FLASH一般空间很大,而且几乎都是以扇区为单位擦除的.
那么假定FLASH计数器为8位,即0~255,那么就可分配256/8=32个字节作为"FLASH计次器",即: 0xff,0xff.....,0xff表示0x00 0xfe,0xff.....,0xff表示0x01 0xfc,0xff.....,0xff表示0x02 ........................... 0x00,0xff.....,0xff表示0x07 0x00,0xfe.....,0xff表示0x08 0x00,0xfc.....,0xff表示0x09 ........................... 0x00,0x00.....,0xff表示0x0f ........................... 0x00,0x00.....,0x00表示0xff
对于FLASH变量则必须采用每次改写地址+1的原则,还需要限制"写入次数". 故一般与FLASH计次器联合使用,即FLASH计次器实际为FLASH变量的"写入指针". 当"写入次数"满时才清除FLASH计次器和FLASH变量所在的扇区.
注意,FLASH计次器在初始化完成后就应该读到RAM中!!! 写入FLASH变量的同时也要更新FLASH计次器以备掉电后再将FLASH计次器的值读入RAM中.
一般FLASH变量是用于不频繁改写时,若需频繁改写,则再需要将FLASH变量读入RAM中.
即运行时在RAM中,掉电或上电时在FLASH中.
类似应用程序: LPCARM之IAP应用举例及FLASH二次写入C++程序祥解(更新版)
倒塌地在网上搜索到盗版的博客: http://blog.csdn.net/zhtek/archive/2006/05/19/745945.aspx 相关链接:http://blog.**/hotpower/113643/message.aspx |