2019-12-14 12:52发布
qq302011 发表于 2015-9-21 11:12 但是我的可用的FLASH地址 在 0x08004000------0x0800bfff之间的一段,应该怎么做? 并不是通常的 最后几 ...
sunnydragon 发表于 2015-9-21 13:51 那就把起始地址设置为:0x08004000,flash擦写最小单位为:16K 务必要保证Demo在自己的板子上运行起来, ...
sunnydragon 发表于 2015-9-21 18:11 1、恭喜~已经入门EasyFlash了,EasyFlash还有更多实用的功能有待你去挖掘。感谢你的FreeRTOS的移植分享。 ...
qq302011 发表于 2015-9-21 21:44 2、擦写平衡模式:3*EF_ERASE_MIN_SIZE(它将会有2个Flash扇区去存储环境变量,按照每个Flash扇区可被擦 ...
sunnydragon 发表于 2015-8-10 08:17 1、保存为字符串主要是为了方便各种类型无损互转。目前我正在设计一个EasyFlash的类型自动转换插件,还支 ...
最多设置5个标签!
那就把起始地址设置为:0x08004000,flash擦写最小单位为:16K
务必要保证Demo在自己的板子上运行起来,然后看懂文档,不懂的再跟帖。
换了新的EASYFLASH成功写入,但是不敢确定是否会超过这个地址范围,不知道怎么测试这玩意,这两个版本相差太大了,重新移植一遍,还是挺麻烦的,对了有需要的兄弟可以参考,我在FREERTOS上的移植源码
2、擦写平衡模式:3*EF_ERASE_MIN_SIZE(它将会有2个Flash扇区去存储环境变量,按照每个Flash扇区可被擦写10W次计算,那么当前配置至少可擦写20W次);
感觉楼主这个磨损平衡有点蛋疼,我的理解如下:
1.必须要2块以上的SECTOR
2.大概是这两个SECTOR交替写,写一次就要擦除一次二不管这个环境变量区域有多大。
3.因此可以计算出最多可保存次数 就是 SECTOR个数*10W,注意有的FLASH只能保证擦写1W次则还要降低十倍
能不能这样做呢?、
不是写一次就要擦除一次FLASH,而是跟着FLASH后面继续写
1.在整个环境变量结构体中头部 保留一个头部判断变量,start_flag=0xa5a5a5a5,有效数据判断变量为valid_flag=0XFFFFFFFF,则存入的数据格式表示如下
假设整个要存入的数据大小为size,
{
0xa5a5a5a5,//开头标记
0XFFFFFFFF,//数据有效标记
size, // 整个数据大小
xxxxxxxxxx, //其他的包头数据
。。。。。。。。。
sssssssssss,//环境变量
ssssssssss, //环境变量
sssssssssssssssssss//环境变量
。。。。。。。。。
ssssssssss//环境变量
ssssssss//环境变量
。。。。。。。。。。
0xa6a6a6a6,//末尾结束标记
}
2.当下次再次保存环境变量的时候,将上一次的valid_flag数据设置为其他数据即可,代表上一次的环境变量木有用了,然后在后面存入本次要保存的数据结构即可
3.考虑到再次上电需要读取环境变量的时候,需要查找有效的查找到最后一次保存的数据,则从第一个0xa5a5a5a5找过去找到无效存储的size,指针一段一段的跳,几下就找到最后的写入位置了,因此也很快
罗里吧嗦写了这么多,不知道说清楚没,希望能对楼主有所帮助
我的磨损平衡策略不是你想的那样,你可以看下这部分源码:https://github.com/armink/EasyFl ... _env_wl.c#L719-L812 。另外,你写那个方法应该是“在擦除最小单位比环境变量大很多的Flash上,可以在保存时自动在后面追加,扇区写满后,再擦除。”吧,如果是这个有在我计划内的,属于以后的优化方向。
ymodem.h请问哪里有呀。我技术菜啊IAP跑不起来楼主。
一周热门 更多>