搜索
bottom↓
回复: 124

【升级】嵌入式Flash闪存库EasyFlash,可以直接保存日志了

  [复制链接]

出0入198汤圆

发表于 2015-6-10 19:20:34 | 显示全部楼层 |阅读模式
EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大实用功能

  • Env 让变量轻松实现掉电保存,支持 写平衡 模式,无需担心变量长度、磨损平衡等问题

使用 键值对(key-value) 方式将变量存储到Flash中。在产品上,能够更加简捷的实现 设定参数运行日志等信息掉电保存的功能。


  • IAP 在线升级再也不是难事儿

该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。


  • (新增)Log 无需文件系统,日志可直接存储在Flash上

非常适合应用在小型的不带文件系统的产品中。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现日志的Flash存储功能。


更多详细介绍,点击:https://github.com/armink/EasyFlash
原帖:http://www.amobbs.com/thread-5613261-1-1.html

更新日志
V1.06.10

  • 新增 Flash存储日志功能,无需文件系统的支持;
  • 删除 用户以前需要自定义的types.h头文件,全部采用C99自带头文件,降低移植复杂度;
  • 增加 C++ 编译器的支持;
  • 增加 环境变量同步锁,提升库在并发量较大的环境下的稳定性;
  • 修复 部分bug;


下载方式
Github:https://github.com/armink/EasyFlash
本坛下载:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

有一句段子是这样说的,身家过亿的只关心自己的身体,身家千万的,在担心传承,勉强糊口度日才天天看国际新闻,关心国家大事。

出0入198汤圆

 楼主| 发表于 2015-6-17 16:55:55 | 显示全部楼层
重要更新:开源的版权协议已有之前的GPL v3.0 修改为更为宽泛 MIT 协议,让大家无需再担心商用的问题。

出0入198汤圆

 楼主| 发表于 2015-7-3 15:33:24 | 显示全部楼层
本帖最后由 sunnydragon 于 2015-7-3 15:43 编辑

最近写了一篇《如何在嵌入式产品中应用键值存储数据库》:http://geek.csdn.net/news/detail/35184,里面有一些EasyFlash的使用场景。欢迎大家拍砖~~

出0入76汤圆

发表于 2015-6-10 19:30:25 | 显示全部楼层
很给力, 感谢您的开源分享

出0入0汤圆

发表于 2015-6-10 20:18:28 | 显示全部楼层
感谢您的开源分享

出0入0汤圆

发表于 2015-6-10 20:29:15 | 显示全部楼层
楼主V587

出0入0汤圆

发表于 2015-6-10 20:47:33 | 显示全部楼层
感谢您的开源分享

出0入0汤圆

发表于 2015-6-10 20:59:03 | 显示全部楼层
支持!
这个不支持都不行
强烈支持!

出0入4汤圆

发表于 2015-6-10 21:03:48 | 显示全部楼层
好东西  一定要支持  

出425入0汤圆

发表于 2015-6-10 21:05:09 | 显示全部楼层
楼主的无私让人敬佩

出50入0汤圆

发表于 2015-6-10 21:15:45 | 显示全部楼层
收藏学习了,谢谢

出0入0汤圆

发表于 2015-6-10 21:27:36 | 显示全部楼层
谢谢分享!!!!!!!

出0入0汤圆

发表于 2015-6-10 21:43:56 | 显示全部楼层
好东西,谢谢分享!

出0入0汤圆

发表于 2015-6-10 21:48:56 | 显示全部楼层
谁能普及一下,这个东西干嘛用的啊?

出0入0汤圆

发表于 2015-6-10 21:58:12 | 显示全部楼层

出0入0汤圆

发表于 2015-6-10 22:02:16 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2015-6-11 05:29:59 来自手机 | 显示全部楼层
谢谢开源共享

出0入0汤圆

发表于 2015-6-11 07:05:26 来自手机 | 显示全部楼层
下了不顶的坏flash

出0入0汤圆

发表于 2015-6-11 07:29:01 | 显示全部楼层
kinsno 发表于 2015-6-10 21:48
谁能普及一下,这个东西干嘛用的啊?

用来做IAP简单了。。。。

出0入4汤圆

发表于 2015-6-11 09:14:56 | 显示全部楼层
感谢            

出0入0汤圆

发表于 2015-6-11 09:34:46 | 显示全部楼层
谢谢分享

出50入0汤圆

发表于 2015-6-11 09:57:55 | 显示全部楼层
收藏了,仔细研究一下

出0入9汤圆

发表于 2015-6-11 10:55:45 | 显示全部楼层
谢谢分享

出20入70汤圆

发表于 2015-6-11 11:05:05 | 显示全部楼层

为LZ无私开源的精神点赞!

出0入0汤圆

发表于 2015-6-11 11:06:29 | 显示全部楼层
mark                                                            

出0入0汤圆

发表于 2015-6-11 11:43:41 | 显示全部楼层
学习编程模版:)

出0入0汤圆

发表于 2015-6-11 16:10:35 | 显示全部楼层
感谢分享

出0入198汤圆

 楼主| 发表于 2015-6-12 08:09:14 | 显示全部楼层

多谢吴兄支持。用它以后往Flash存储断言就更简单了。

出0入198汤圆

 楼主| 发表于 2015-6-12 08:10:05 | 显示全部楼层
interstellar_tr 发表于 2015-6-10 20:59
支持!
这个不支持都不行
强烈支持!

欢迎下载试用~多反馈建议哈。

出0入198汤圆

 楼主| 发表于 2015-6-12 08:11:30 | 显示全部楼层
foxpro2005 发表于 2015-6-10 19:30
很给力, 感谢您的开源分享

欢迎试用并反馈建议哈~

出0入198汤圆

 楼主| 发表于 2015-6-12 08:12:52 | 显示全部楼层
kinsno 发表于 2015-6-10 21:48
谁能普及一下,这个东西干嘛用的啊?


你可以看下这几个Demo的动画,理解起来就容易多了。
https://github.com/armink/EasyFlash#21环境变量

主要为Flash提供标准的、多功能API函数库。

出0入198汤圆

 楼主| 发表于 2015-6-12 08:14:38 | 显示全部楼层
yuzr 发表于 2015-6-11 09:57
收藏了,仔细研究一下

欢迎试用,有啥问题随时留言。

出0入0汤圆

发表于 2015-6-12 08:29:13 | 显示全部楼层
sunnydragon 发表于 2015-6-12 08:12
你可以看下这几个Demo的动画,理解起来就容易多了。
https://github.com/armink/EasyFlash#21环境变量

动画? 没看着啊,只看到GIT里的代码啊;才发现你说的协画是GIF,最关键的是我竟然打不开GIF;
除了GIT,还有别处有动画吗?

出0入0汤圆

发表于 2015-6-12 08:45:37 | 显示全部楼层
开源的轻量级嵌入式Flash存储器库

出0入198汤圆

 楼主| 发表于 2015-6-12 09:14:40 | 显示全部楼层
kinsno 发表于 2015-6-12 08:29
动画? 没看着啊,只看到GIT里的代码啊;才发现你说的协画是GIF,最关键的是我竟然打不开GIF;
除了GIT,还有别 ...

你再试试,我把中文文档中的Gif动画更换为国内源了。

出0入0汤圆

发表于 2015-6-12 13:26:59 | 显示全部楼层
本帖最后由 mvip 于 2015-6-12 13:32 编辑

在研究中,不知道怎么用。
非常感谢楼主无私的贡献

出0入198汤圆

 楼主| 发表于 2015-6-12 13:51:38 | 显示全部楼层
mvip 发表于 2015-6-12 13:26
在研究中,不知道怎么用。
非常感谢楼主无私的贡献

不知道怎么用是不清楚如何应用到项目中还是不了解这个软件的功能?

出0入0汤圆

发表于 2015-6-12 15:56:02 | 显示全部楼层
已下载,谢谢

出0入0汤圆

发表于 2015-6-12 16:05:05 | 显示全部楼层
楼主V5         

出0入0汤圆

发表于 2015-6-12 16:20:43 | 显示全部楼层
真的是牛人,感激不尽

出0入0汤圆

发表于 2015-6-13 11:08:05 | 显示全部楼层
很给力, 感谢您的开源分享

出0入0汤圆

发表于 2015-6-13 11:12:47 | 显示全部楼层
sunnydragon 发表于 2015-6-12 13:51
不知道怎么用是不清楚如何应用到项目中还是不了解这个软件的功能?

我一直想做个开关机上电的时间和各种报警事件的日志,可以借鉴一下。只是没有看懂楼主的程序,或许楼主的层次较高,希望更详细点说明一下.非常感谢

出0入4汤圆

发表于 2015-6-13 16:18:00 | 显示全部楼层
感谢!感谢!你开源精神很值得敬佩!

出0入51汤圆

发表于 2015-6-13 16:22:39 | 显示全部楼层
楼主无私,非常感谢

出10入0汤圆

发表于 2015-6-13 16:58:09 | 显示全部楼层
本帖最后由 casterbn 于 2015-6-13 22:02 编辑

STM32F013RE发现也可以用,谢谢楼主。
不过update命令似乎还没实现?
用的rtt工程:
EasyFlash-V1.06.10\demo\stm32f10x\rtt\RVMDK\EasyFlash.uvproj

出0入0汤圆

发表于 2015-6-13 22:50:37 | 显示全部楼层
大概浏览了一下代码,写的很正规,但硬件技术细节还有很多提高的地方,对Flash分类不足,SPI,并口,nor,nand有区别,在中间层应该处理部分细节,故利用率不高。
当然,对于一般玩还是足够了。
谢谢楼主分享,鼓励独立思考写代码。

出0入0汤圆

发表于 2015-6-14 00:10:40 | 显示全部楼层
感谢无私奉献!

出0入198汤圆

 楼主| 发表于 2015-6-14 14:40:09 | 显示全部楼层
mvip 发表于 2015-6-13 11:12
我一直想做个开关机上电的时间和各种报警事件的日志,可以借鉴一下。只是没有看懂楼主的程序,或许楼主的 ...

建议先别着急看懂源码哈~重要的是
1、了解EasyFlash能做什么:可以看下说明文档,不懂的可以再留言
2、能够提供哪些操作接口给用户:可以看下/docs/zh/下的API文档,不明白的也可以再留言
3、这些接口怎么和自己的软件对接:这样就只能详细贴出你的软件和需求,大家帮你出主意了

出0入198汤圆

 楼主| 发表于 2015-6-14 14:41:18 | 显示全部楼层
yangpeng012 发表于 2015-6-13 16:18
感谢!感谢!你开源精神很值得敬佩!

多谢支持,国内的开源软件环境需要大家一起来维护。

出0入198汤圆

 楼主| 发表于 2015-6-14 14:41:47 | 显示全部楼层
my_avr 发表于 2015-6-13 16:22
楼主无私,非常感谢

欢迎下载试用,并反馈建议哈~

出0入198汤圆

 楼主| 发表于 2015-6-14 14:47:08 | 显示全部楼层
casterbn 发表于 2015-6-13 16:58
STM32F013RE发现也可以用,谢谢楼主。
不过update命令似乎还没实现?
用的rtt工程:

那个update命令用的不是RTT的finsh哦~是我接下来还要开源的其他软件项目上的。
但是原理很简单,就是用的RTT自带的Ymodem库,PC端使用Ymodem的控制端软件发送文件,最后通过EasyFlash来更新APP。如果有疑问也可以在下面留言讨论哈~

出0入198汤圆

 楼主| 发表于 2015-6-14 14:58:56 | 显示全部楼层
learner123 发表于 2015-6-13 22:50
大概浏览了一下代码,写的很正规,但硬件技术细节还有很多提高的地方,对Flash分类不足,SPI,并口,nor,n ...

1、EasyFlash被设计为“主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发”,你可以再详细了解下这个开源软件:https://github.com/armink/EasyFlash#1介绍。所以这些Flash底层驱动需要用户自己实现,大家也可以提供自己Flash平台的Demo,提交到项目中,方便其他网友使用。
2、我非常不理解你说的“当然,对于一般玩还是足够了”。EasyFlash提供的功能早就已经大批量使用在我的多个产品上,而且还有很多网友也把EasyFlash用在自己的项目中。你会闲的没事费这么大心思设计一个玩具?

出0入0汤圆

发表于 2015-6-14 17:00:36 | 显示全部楼层
sunnydragon 发表于 2015-6-14 14:58
1、EasyFlash被设计为“主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高 ...

关键看你怎么定义产品,或者说什么级别的产品。
一般,我所说的玩玩的产品,例如国内山寨级别的产品,没有考虑产品质量的。当然,并不是说这种产品就不赚钱,没有社会贡献。有价值,但不高。
这里只是浏览了一下代码,对比一下较好的代码的差距而已。也许,楼主现在已经有“高端”代码,但至少这个版本的代码还有相当大的提高空间。

出0入0汤圆

发表于 2015-6-14 17:37:49 | 显示全部楼层
不知道做什么的,回头研究研究

出0入0汤圆

发表于 2015-6-14 20:34:59 | 显示全部楼层
好东西,感谢分享

出0入0汤圆

发表于 2015-6-14 21:33:06 | 显示全部楼层
好东西 ,用的上,谢谢

出0入0汤圆

发表于 2015-6-15 07:04:31 来自手机 | 显示全部楼层
learner123 发表于 2015-6-14 17:00
关键看你怎么定义产品,或者说什么级别的产品。
一般,我所说的玩玩的产品,例如国内山寨级别的产品,没 ...

看的出来,是位高手,如果能就具体问题做出分析和提升,这个帖子会因为您的参与而质量得到提升,大家能够思考和进步,这也是这个论坛强大之所在,谢谢!

出0入0汤圆

发表于 2015-6-15 08:14:35 | 显示全部楼层
本帖最后由 chxaitz 于 2015-6-15 08:39 编辑
learner123 发表于 2015-6-13 22:50
大概浏览了一下代码,写的很正规,但硬件技术细节还有很多提高的地方,对Flash分类不足,SPI,并口,nor,n ...


对于LZ的问题,那在小型的数据存储器中,你的数据的存储你是怎么解决的,有什么更好的方案分享啊?O(∩_∩)O哈哈~
又向下看了你的回复,那你能不能把那个“较好”的代码分享一下啊,自己水平有限,也希望多学习一下别人的优秀代码,支持开源,共同进步~O(∩_∩)O哈哈~
或者不开源代码,可以开源思路,思路比代码更重要~O(∩_∩)O哈哈~

出0入10汤圆

发表于 2015-6-15 08:37:01 | 显示全部楼层
Mark               !

出0入0汤圆

发表于 2015-6-15 16:49:29 | 显示全部楼层
首先,我不做产品,是做产品质量分析,所以也搞一些故障的代码分析,特别是有一定要求的工业产品。有机会接触好的代码,但是职业操守要求不能展示,毕竟是别人吃饭的家伙。举个例子,外包软件的
其次,软件思路方便倒是可以聊聊,前面都已经说过了。其实,代码细节更关键,但并不神秘。
最后,从山寨走向专业不是必须的,甚至有时候还赔钱,看个人的发展方向了。专业搞,可以参考IBM的软件测试相关资料作为起步。

出0入13汤圆

发表于 2015-6-16 07:02:45 来自手机 | 显示全部楼层
谢谢楼主,支持

出0入8汤圆

发表于 2015-6-16 09:22:11 | 显示全部楼层
楼主太给力,之前用FLASH没用文件系统总是很苦恼。

出0入0汤圆

发表于 2015-6-16 09:36:47 | 显示全部楼层
楼主搞的这个是不是类似于一个小型数据库啊

出0入0汤圆

发表于 2015-6-16 09:48:15 | 显示全部楼层
楼主好人,感谢

出0入198汤圆

 楼主| 发表于 2015-6-16 11:09:22 | 显示全部楼层
yujintian 发表于 2015-6-16 09:22
楼主太给力,之前用FLASH没用文件系统总是很苦恼。

多谢支持,我之前也是很烦恼。产品存储的数据不多,但是搞文件系统又显得臃肿,网上也没有找到合适的开源软件,最后想想还是自己写个开源的类似Uboot环境变量的Flash库吧。现在这个库已经成为我的所有项目中的必备品,通过key-value方式,能很轻松实现之前觉得很麻烦的事情,例如:存储的变量长度不一致、怎么解决各种类型转换问题、软件死机后怎么在没有文件系统的前提下保存错误信息。这些都可以通过EasyFlash的Env功能得到解决。

出0入198汤圆

 楼主| 发表于 2015-6-16 11:14:21 | 显示全部楼层
myxiaonia 发表于 2015-6-16 09:36
楼主搞的这个是不是类似于一个小型数据库啊

好眼力。。可以认为EasyFlash的Env功能就是嵌入式MCU上的小型基于Flash的键值对存储数据库。增删改查所有功能都有的。如果你了解Redis(一个开源、支持网络、基于内存、键值对存储数据库)的话,就会发现EasyFlash的Env功能个跟起很像,我也是后来才发现Redis的。

出0入0汤圆

发表于 2015-8-7 14:36:50 | 显示全部楼层
很好,已经在项目中使用!

出0入198汤圆

 楼主| 发表于 2015-8-7 19:10:58 | 显示全部楼层
li.wen 发表于 2015-8-7 14:36
很好,已经在项目中使用!

你是在哪个平台上使用的?用的感觉如何?欢迎跟大家分享你的使用感受哈~

出0入0汤圆

发表于 2015-8-8 00:04:27 | 显示全部楼层
多谢分享~~

出0入0汤圆

发表于 2015-8-8 11:11:25 | 显示全部楼层
楼主威武,感谢分享

出0入0汤圆

发表于 2015-8-8 11:17:22 | 显示全部楼层
受教了,感谢分享

出0入0汤圆

发表于 2015-8-10 00:21:53 | 显示全部楼层
sunnydragon 发表于 2015-8-7 19:10
你是在哪个平台上使用的?用的感觉如何?欢迎跟大家分享你的使用感受哈~ ...

RTT! 正在写程序中,后续分享心得。
目前用下来觉得为啥ENV的不能直接保存整型数据而是要保存char型数据呢?

另外,如果有IAP的例程就最好了,谢谢

出0入198汤圆

 楼主| 发表于 2015-8-10 08:17:38 | 显示全部楼层
li.wen 发表于 2015-8-10 00:21
RTT! 正在写程序中,后续分享心得。
目前用下来觉得为啥ENV的不能直接保存整型数据而是要保存char型数据 ...

1、保存为字符串主要是为了方便各种类型无损互转。目前我正在设计一个EasyFlash的类型自动转换插件,还支持结构体。这样用户再输入入参就只用原始类型即可了。
2、IAP的Demo是有的,看这里(https://github.com/armink/EasyFlash/tree/master/demo/iap),这里(https://github.com/armink/EasyFlash/tree/master/docs/zh)还有比较全的中文文档,估计你用的那个版本是不是比较旧的吧,所以看不到。建议点击EasyFlash主页(https://github.com/armink/EasyFlash)右上角的Watch & Star,这样有更新时会及时用邮件通知你。

出0入0汤圆

发表于 2015-8-10 09:29:19 | 显示全部楼层
学习了,谢谢分享!

出0入0汤圆

发表于 2015-8-10 10:03:33 | 显示全部楼层
sunnydragon 发表于 2015-8-10 08:17
1、保存为字符串主要是为了方便各种类型无损互转。目前我正在设计一个EasyFlash的类型自动转换插件,还支 ...

保存原始数据类型甚至是结构体还是蛮重要的!
很多时候,ENV要在非控制台的情况下使用,这样保存读取原始数据就很重要。
这种情况下,往往会从上位机往下发原始的配置数据,如果需要先转字符串,然后到下位机再由字符串转回要用的数据显得麻烦。

虽然也可以用LOG来实现配置数据的保存,但是还是不如ENV直观。

出0入0汤圆

发表于 2015-8-10 13:12:28 | 显示全部楼层
顶!收藏学习

出0入198汤圆

 楼主| 发表于 2015-8-11 12:07:38 | 显示全部楼层
li.wen 发表于 2015-8-10 10:03
保存原始数据类型甚至是结构体还是蛮重要的!
很多时候,ENV要在非控制台的情况下使用,这样保存读取原始 ...


是的,也有很多网友反应了这个问题~我这边初步考虑增加这些类型的自动转换:
1、基本类型(int、float等)
2、数组结构
3、结构体

你这边有哪些比较常用的需要保存的数据类型?我这边分优先级,优先开发开发大家常用类型。

出0入0汤圆

发表于 2015-8-11 21:08:02 | 显示全部楼层
sunnydragon 发表于 2015-8-11 12:07
是的,也有很多网友反应了这个问题~我这边初步考虑增加这些类型的自动转换:
1、基本类型(int、float等 ...

目前这三个就覆盖了我所有的需求了。满足了

出0入198汤圆

 楼主| 发表于 2015-8-12 20:42:24 | 显示全部楼层
li.wen 发表于 2015-8-11 21:08
目前这三个就覆盖了我所有的需求了。满足了

对指针类型有没有需求呢?

出0入0汤圆

发表于 2015-8-12 22:59:44 | 显示全部楼层
sunnydragon 发表于 2015-8-12 20:42
对指针类型有没有需求呢?

常用的支持就可以了。不常用的,用户自己转换了再存呗。

出0入10汤圆

发表于 2015-9-15 14:15:12 | 显示全部楼层
learner123 发表于 2015-6-14 17:00
关键看你怎么定义产品,或者说什么级别的产品。
一般,我所说的玩玩的产品,例如国内山寨级别的产品,没 ...

对于LZ的问题,那在小型的数据存储器中,你的数据的存储你是怎么解决的,有什么更好的方案分享啊?O(∩_∩)O哈哈~
又向下看了你的回复,那你能不能把那个“较好”的代码分享一下啊,自己水平有限,也希望多学习一下别人的优秀代码,支持开源,共同进步~O(∩_∩)O哈哈~
或者不开源代码,可以开源思路,思路比代码更重要~O(∩_∩)O哈哈~

出0入0汤圆

发表于 2015-9-20 10:51:22 | 显示全部楼层
本帖最后由 qq302011 于 2015-9-20 11:04 编辑

能否添加一些对相应的宏定义的详细说明,比方说FLASH_ENV_SECTION_SIZE等,在使用中还是有些不太确定,比方说由于F407的FLASH是1M字节,前面几个SECTOR的大小较小,为了节省空间我需要把EASYFLASH使用到的空间定义在这些前面这几个SECTOR,
地址如下
0X08000000-0x08003fff  //程序空间
0X08004000-0X0800bfff //EASYFLASH使用
0x0800c000-0X0800ffff//自定义FLASH,我自己坐特殊使用
0X08010000-0x080fffff//程序空间

我不太确定使用环境变量之后,环境变量最大的使用地址会不会超过我的FLASH定义进入我的自定义地址空间,请楼主解答,谢谢

我现在的定义如下:

#define FLASH_ENV_USING_WEAR_LEVELING_MODE
//#define FLASH_ENV_USING_NORMAL_MODE

#define FLASH_ENV_START_ADDR            (FLASH_BASE + 16 * 1024) /* on the chip position: 256KB */
/* the minimum size of flash erasure */
#define FLASH_ERASE_MIN_SIZE            (16 * 1024)              /* it is 128K for compatibility */
#ifdef FLASH_ENV_USING_WEAR_LEVELING_MODE
/* ENV section total bytes size in wear leveling mode. */
#define FLASH_ENV_SECTION_SIZE          (2 * FLASH_ERASE_MIN_SIZE)/* 512K */
#else
/* ENV section total bytes size in normal mode. It's equal with FLASH_USER_SETTING_ENV_SIZE */
#define FLASH_ENV_SECTION_SIZE          (FLASH_USER_SETTING_ENV_SIZE)
#endif

出0入0汤圆

发表于 2015-9-20 11:49:57 | 显示全部楼层
#define FLASH_ENV_USING_CRC_CHECK
/* the user setting size of ENV, must be word alignment */
#define FLASH_USER_SETTING_ENV_SIZE     (2 * 1024)                /* default 2K */
/* using wear leveling mode or normal mode */
#define FLASH_ENV_USING_WEAR_LEVELING_MODE
//#define FLASH_ENV_USING_NORMAL_MODE


/* ENV start address */
#define FLASH_ENV_START_ADDR            (FLASH_BASE + 16 * 1024) /* on the chip position: 256KB */
/* the minimum size of flash erasure */
#define FLASH_ERASE_MIN_SIZE            (16 * 1024)              /* it is 128K for compatibility */
#ifdef FLASH_ENV_USING_WEAR_LEVELING_MODE
/* ENV section total bytes size in wear leveling mode. */
#define FLASH_ENV_SECTION_SIZE          (1 * FLASH_ERASE_MIN_SIZE)/* 512K */
#else
/* ENV section total bytes size in normal mode. It's equal with FLASH_USER_SETTING_ENV_SIZE */
#define FLASH_ENV_SECTION_SIZE          (FLASH_USER_SETTING_ENV_SIZE)
#endif
另外按上面的定义测试发现,使用的F407,出现如下错误
设置成
#define FLASH_ENV_USING_NORMAL_MODE
则没有问题

出0入198汤圆

 楼主| 发表于 2015-9-20 18:27:52 | 显示全部楼层
本帖最后由 sunnydragon 于 2015-9-20 18:50 编辑
qq302011 发表于 2015-9-20 11:49
#define FLASH_ENV_USING_CRC_CHECK
/* the user setting size of ENV, must be word alignment */
#define ...


https://github.com/armink/EasyFl ... /demo/env/stm32f4xx    这个是stm32f4xx平台下的Demo你可以直接打开使用的。

另外我看你使用还是比较旧版本的EasyFlash,建议采用Github上的最新源码,同时Github上还可以在线看到详细的文档,你说的那些宏定义介绍,在文档里面都有描述。

项目Github地址:https://github.com/armink/EasyFlash
项目在线文档地址:https://github.com/armink/EasyFlash/tree/master/docs/zh

出0入0汤圆

发表于 2015-9-21 10:31:36 | 显示全部楼层
sunnydragon 发表于 2015-9-20 18:27
https://github.com/armink/EasyFlash/tree/master/demo/env/stm32f4xx    这个是stm32f4xx平台下的Demo ...

按我的配置执行到这一句,不知道怎么回事
FLASH_INFO("Error: The flash has no available space to save ENV.\n");

出0入198汤圆

 楼主| 发表于 2015-9-21 10:59:25 | 显示全部楼层
qq302011 发表于 2015-9-21 10:31
按我的配置执行到这一句,不知道怎么回事
FLASH_INFO("Error: The flash has no available space to save ...

你先使用我给你说的那个stm32f40x的Demo,那个直接打开就可以用的,等你看着文档,了解详细的流程和配置之后再去自己动手做改动。

出0入198汤圆

 楼主| 发表于 2015-9-21 11:08:28 | 显示全部楼层
qq302011 发表于 2015-9-21 10:31
按我的配置执行到这一句,不知道怎么回事
FLASH_INFO("Error: The flash has no available space to save ...

你先使用我给你说的那个stm32f40x的Demo,那个直接打开就可以用的,等你看着文档,了解详细的流程和配置之后再去自己动手做改动。

出0入0汤圆

发表于 2015-9-21 11:12:23 | 显示全部楼层
sunnydragon 发表于 2015-9-21 11:08
你先使用我给你说的那个stm32f40x的Demo,那个直接打开就可以用的,等你看着文档,了解详细的流程和配置 ...

但是我的可用的FLASH地址 在  0x08004000------0x0800bfff之间的一段,应该怎么做?
并不是通常的 最后几个SECTOR

出0入198汤圆

 楼主| 发表于 2015-9-21 11:12:30 | 显示全部楼层
qq302011 发表于 2015-9-21 10:31
按我的配置执行到这一句,不知道怎么回事
FLASH_INFO("Error: The flash has no available space to save ...

你先使用我给你说的那个stm32f40x的Demo,那个直接打开就可以用的,等你看着文档,了解详细的流程和配置之后再去自己动手做改动。

出0入198汤圆

 楼主| 发表于 2015-9-21 13:06:51 | 显示全部楼层
qq302011 发表于 2015-9-21 11:12
但是我的可用的FLASH地址 在  0x08004000------0x0800bfff之间的一段,应该怎么做?
并不是通常的 最后几 ...

那就把起始地址设置为:0x08004000,flash擦写最小单位为:16K

务必要保证Demo在自己的板子上运行起来,然后看懂文档,不懂的再跟帖。

出0入198汤圆

 楼主| 发表于 2015-9-21 13:51:49 | 显示全部楼层
qq302011 发表于 2015-9-21 11:12
但是我的可用的FLASH地址 在  0x08004000------0x0800bfff之间的一段,应该怎么做?
并不是通常的 最后几 ...

那就把起始地址设置为:0x08004000,flash擦写最小单位为:16K

务必要保证Demo在自己的板子上运行起来,然后看懂文档,不懂的再跟帖。

出0入0汤圆

发表于 2015-9-21 15:55:57 | 显示全部楼层
sunnydragon 发表于 2015-9-21 13:51
那就把起始地址设置为:0x08004000,flash擦写最小单位为:16K

务必要保证Demo在自己的板子上运行起来, ...

换了新的EASYFLASH成功写入,但是不敢确定是否会超过这个地址范围,不知道怎么测试这玩意,这两个版本相差太大了,重新移植一遍,还是挺麻烦的,对了有需要的兄弟可以参考,我在FREERTOS上的移植源码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2015-9-21 18:11:18 | 显示全部楼层
本帖最后由 sunnydragon 于 2015-9-21 18:13 编辑
qq302011 发表于 2015-9-21 15:55
换了新的EASYFLASH成功写入,但是不敢确定是否会超过这个地址范围,不知道怎么测试这玩意,这两个版本相 ...


1、恭喜~已经入门EasyFlash了,EasyFlash还有更多实用的功能有待你去挖掘。感谢你的FreeRTOS的移植分享。

2、关于新旧代码不一致,主要是后期做了重构,以前的架构、规范、后期可维护性等很多方面都设计的不合理,所以做了重构是必然,软件要不断进步嘛。

3、“但是不敢确定是否会超过这个地址范围,不知道怎么测试”
这点新手很容易犯错,问题主要出自没有看懂手册中提到的分区说明,所以强烈建议新手阅读下分区说明这个章节(点击阅读),不懂的就跟帖留言,我会及时给大家回复。

出0入0汤圆

发表于 2015-9-21 21:44:43 | 显示全部楼层
sunnydragon 发表于 2015-9-21 18:11
1、恭喜~已经入门EasyFlash了,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,指针一段一段的跳,几下就找到最后的写入位置了,因此也很快
  
罗里吧嗦写了这么多,不知道说清楚没,希望能对楼主有所帮助

出0入198汤圆

 楼主| 发表于 2015-9-22 08:01:10 | 显示全部楼层
qq302011 发表于 2015-9-21 21:44
2、擦写平衡模式:3*EF_ERASE_MIN_SIZE(它将会有2个Flash扇区去存储环境变量,按照每个Flash扇区可被擦 ...

我的磨损平衡策略不是你想的那样,你可以看下这部分源码:https://github.com/armink/EasyFl ... _env_wl.c#L719-L812  。另外,你写那个方法应该是“在擦除最小单位比环境变量大很多的Flash上,可以在保存时自动在后面追加,扇区写满后,再擦除。”吧,如果是这个有在我计划内的,属于以后的优化方向。

出0入0汤圆

发表于 2015-10-10 22:09:42 | 显示全部楼层
sunnydragon 发表于 2015-8-10 08:17
1、保存为字符串主要是为了方便各种类型无损互转。目前我正在设计一个EasyFlash的类型自动转换插件,还支 ...


ymodem.h请问哪里有呀。我技术菜啊IAP跑不起来楼主。

出0入198汤圆

 楼主| 发表于 2015-10-11 10:57:51 | 显示全部楼层
vjcmain 发表于 2015-10-10 22:09
ymodem.h请问哪里有呀。我技术菜啊IAP跑不起来楼主。

这里用到的是RT-Thread自带的Ymodem组件,你要配合RT-Thread一起使用的。在其的Ymodem组件源码中可以找到ymodem.h

出0入0汤圆

发表于 2015-10-11 12:16:47 | 显示全部楼层
  谢谢分享

出0入0汤圆

发表于 2015-11-6 14:30:23 | 显示全部楼层
楼主 可否提供no os 的IAP的DEMO 搞了一天搞不来了。要哭         

出0入0汤圆

发表于 2015-11-6 22:18:57 | 显示全部楼层
支持楼主,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-12-10 20:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表