搜索
bottom↓
回复: 154

【升级】Flash闪存库EasyFlash,新增掉电保护功能

  [复制链接]

出0入198汤圆

发表于 2015-7-11 10:12:25 | 显示全部楼层 |阅读模式
本帖最后由 sunnydragon 于 2015-7-11 10:12 编辑

EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供   三大实用功能 :
  • 1、Env 小型KV数据库,支持 写平衡(磨损平衡)掉电保护模式
让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 设定参数运行日志等信息掉电保存的功能。
  • 2、IAP 在线升级再也不是难事儿
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。
  • 3、Log 无需文件系统,日志可直接存储在Flash上
非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。

更多详细介绍、使用场景及使用说明请点击:https://github.com/armink/EasyFlash

EasyFlash发布已有半年时间,在此期间得到很多热心网友的支持,感谢大家在试用的同时也提出了很多宝贵的建议,这也是EasyFlash在半年时间内发展快速的原因。未来,EasyFlash目标成为嵌入式领域最好用的闪存库,只要产品上有断电记忆的功能,EasyFlash都能帮你完成。一起来看下最新版更新日志。

V1.07.10
  • 新增 ENV功能的掉电保护模式,正在保存数据时意外掉电,下次上电后数据将会自动回滚;
  • 新增 IAP及Log功能的Demo;
  • 修改 授权协议为更为宽泛的MIT协议;
  • 删除 CRC检查的宏定义,对ENV强制开启CRC检查;
  • 重构 方法接口及文件命名,使其更加规范。


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

本帖子中包含更多资源

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

x

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

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

出0入198汤圆

 楼主| 发表于 2015-8-1 15:13:05 | 显示全部楼层
大家务必先仔细阅读下Github上的EasyFlash首页介绍文档:https://github.com/armink/EasyFlash     ,可以有助于大家更好的了解这个开源项目。
另外建议大家点击项目首页 https://github.com/armink/EasyFlash 右上角 Watch & Star,这样项目有更新时,会及时以邮件形式通知你。

文档都是Markdown格式的,建议大家在线阅读,这样格式比较全。
移植文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md
API文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md

出0入0汤圆

发表于 2015-7-11 10:28:21 | 显示全部楼层
沙发,楼主辛苦了。。。

出0入0汤圆

发表于 2015-7-11 10:34:09 | 显示全部楼层
比较关心稳定性如何?

出0入198汤圆

 楼主| 发表于 2015-7-11 10:47:20 | 显示全部楼层
tian_zi 发表于 2015-7-11 10:34
比较关心稳定性如何?


稳定性你就放心吧,这个很早就大批量用在我的多种产品上了,而且还有很多网友也都在使用。

出0入0汤圆

发表于 2015-7-11 10:52:22 | 显示全部楼层
sunnydragon 发表于 2015-7-11 10:47
稳定性你就放心吧,这个很早就大批量用在我的多种产品上了,而且还有很多网友也都在使用。 ...

三大功能是可以同时实现还是只能选其一模式,比如只作为IAP?

出0入198汤圆

 楼主| 发表于 2015-7-11 10:54:00 | 显示全部楼层
tian_zi 发表于 2015-7-11 10:52
三大功能是可以同时实现还是只能选其一模式,比如只作为IAP?

三个功能可以一起用的,不冲突,我自己产品上就是这样的。

出75入4汤圆

发表于 2015-7-11 11:11:31 | 显示全部楼层
这个顶。以后类似的功能就不用自己码代码了。

出0入0汤圆

发表于 2015-7-11 13:42:12 来自手机 | 显示全部楼层
越来越好了

出0入0汤圆

发表于 2015-7-11 13:53:11 | 显示全部楼层
有机会考虑用一下,支持楼主。

出0入0汤圆

发表于 2015-7-11 14:27:51 来自手机 | 显示全部楼层
这么高端,没有用过啊

出10入0汤圆

发表于 2015-7-11 14:39:49 | 显示全部楼层
sunnydragon 发表于 2015-7-11 10:47
稳定性你就放心吧,这个很早就大批量用在我的多种产品上了,而且还有很多网友也都在使用。 ...

有一些疑问
这个基于RTT上运行的EF,本身是BOOTLOADER呢,还是根本就是一个APP呢。
如果何区别APP和BOOT?

出0入198汤圆

 楼主| 发表于 2015-7-11 15:05:20 | 显示全部楼层
taishandadi 发表于 2015-7-11 11:11
这个顶。以后类似的功能就不用自己码代码了。

是的~这就是开源软件的意义,贡献社会,让软件最大程度被复用。

出0入8汤圆

发表于 2015-7-11 15:11:06 | 显示全部楼层
功能越来越强大,楼主强人!

出0入198汤圆

 楼主| 发表于 2015-7-11 15:11:46 | 显示全部楼层

必须的~~这也是离不开大家的支持~

出0入198汤圆

 楼主| 发表于 2015-7-11 15:12:18 | 显示全部楼层
styleno1 发表于 2015-7-11 13:53
有机会考虑用一下,支持楼主。

好的~里面有很多Demo,欢迎试用哈~

出0入198汤圆

 楼主| 发表于 2015-7-11 15:14:35 | 显示全部楼层
lkl10800139 发表于 2015-7-11 14:27
这么高端,没有用过啊

内部复杂度还好~主要是提供统一、通用、稳定的类库,开发人员只需关注业务,无需关注底层,简化大家的应用软件开发周期。

出0入0汤圆

发表于 2015-7-11 15:16:22 | 显示全部楼层
好厉害,先收藏了,以后备用

出0入198汤圆

 楼主| 发表于 2015-7-11 15:21:35 | 显示全部楼层
huike 发表于 2015-7-11 14:39
有一些疑问
这个基于RTT上运行的EF,本身是BOOTLOADER呢,还是根本就是一个APP呢。
如果何区别APP和BOOT ...

这个Env Demo里面的RTT例程可以认为是APP,这个例程主要演示的也是Env功能。
实际上EasyFlash本身在Bootloader及App里面都可以使用,ENV功能可以做为Bootloader及App沟通的桥梁,为IAP功能提供便利。

出0入198汤圆

 楼主| 发表于 2015-7-11 15:25:06 | 显示全部楼层
yujintian 发表于 2015-7-11 15:11
功能越来越强大,楼主强人!

这样离不开大家的支持,欢迎下载试用最新版本,有什么建议可以随时反馈哈~

出10入0汤圆

发表于 2015-7-11 15:32:27 | 显示全部楼层
sunnydragon 发表于 2015-7-11 15:21
这个Env Demo里面的RTT例程可以认为是APP,这个例程主要演示的也是Env功能。
实际上EasyFlash本身在Bootl ...

大体上明白了
这样算起来对我有点压力。
我的FLASH只有64K,如果BOOT上用了EV,APP上再用EV,直接去了12K了。
看来这个只适用于FLASH比较大的产品上。

出10入0汤圆

发表于 2015-7-11 15:35:21 | 显示全部楼层
sunnydragon 发表于 2015-7-11 15:21
这个Env Demo里面的RTT例程可以认为是APP,这个例程主要演示的也是Env功能。
实际上EasyFlash本身在Bootl ...

如果RTT_IAP的DEMO算是APP,在APP里升级APP,这样是不是还需要一个备份区?那,那FLASH够不够用呀

出0入198汤圆

 楼主| 发表于 2015-7-11 15:40:09 | 显示全部楼层
huike 发表于 2015-7-11 15:35
如果RTT_IAP的DEMO算是APP,在APP里升级APP,这样是不是还需要一个备份区?那,那FLASH够不够用呀{:funk: ...

首先 没法做到App升级App,只能由Bootloader来升级App。
备份区的最大目的是保证接收数据及更新过程中出现问题,下次上电后软件依然可用,提高系统的容错率。
如果你的产品不需要这样的功能,那么你可以不需要IAP功能的备份区,也不用担心Flash够不够,直接在Bootloader里边接收边把数据拷贝到App即可。

出10入0汤圆

发表于 2015-7-11 15:44:55 | 显示全部楼层
sunnydragon 发表于 2015-7-11 15:40
首先 没法做到App升级App,只能由Bootloader来升级App。
备份区的最大目的是保证接收数据及更新过程中出 ...

谢谢,我理解你的意思。假如下载有问题时,原APP没有擦除,提高了可靠性。这算是空间与可靠性的取舍。

是否可以APP和BOOT共用一个EF,就像流明的CM3,内置了驱动库一样。

出0入198汤圆

 楼主| 发表于 2015-7-11 15:51:41 | 显示全部楼层
huike 发表于 2015-7-11 15:44
谢谢,我理解你的意思。假如下载有问题时,原APP没有擦除,提高了可靠性。这算是空间与可靠性的取舍。

...

EasyFlash当然能做到在源码及备份区的共用,我们都是这样做的,这也是最标准的做法。

出0入0汤圆

发表于 2015-7-11 15:54:55 | 显示全部楼层
sunnydragon 发表于 2015-7-11 15:25
这样离不开大家的支持,欢迎下载试用最新版本,有什么建议可以随时反馈哈~ ...

下载了,找不到说明文档。
README.md 用什么软件打开?

出0入198汤圆

 楼主| 发表于 2015-7-11 15:58:10 | 显示全部楼层
zyw19987 发表于 2015-7-11 15:54
下载了,找不到说明文档。
README.md 用什么软件打开?

.md是Markdown文档。根目录及doc下都有这类文档。如果没有Markdown编辑器就直接在网页上查看就行,很方便的。
例如:https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md

出10入0汤圆

发表于 2015-7-11 16:05:13 | 显示全部楼层
sunnydragon 发表于 2015-7-11 15:51
EasyFlash当然能做到在源码及备份区的共用,我们都是这样做的,这也是最标准的做法。 ...


我的意思是不占用两倍的空间的情况下,共用一个EF。望赐教!

出0入198汤圆

 楼主| 发表于 2015-7-11 16:08:58 | 显示全部楼层
huike 发表于 2015-7-11 16:05
我的意思是不占用两倍的空间的情况下,共用一个EF。望赐教!

没听懂你的意思,代码共用,还是什么共用,说具体点。

出10入0汤圆

发表于 2015-7-11 16:17:28 | 显示全部楼层
sunnydragon 发表于 2015-7-11 16:08
没听懂你的意思,代码共用,还是什么共用,说具体点。

FLASH空间共用。比如GUI/RTT共用,在BOOT和APP里共用。但是不需要存储两份空间。

出0入198汤圆

 楼主| 发表于 2015-7-11 16:26:13 | 显示全部楼层
huike 发表于 2015-7-11 16:17
FLASH空间共用。比如GUI/RTT共用,在BOOT和APP里共用。但是不需要存储两份空间。 ...

明白你的意思了~可以参考这个例子嘛http://www.amobbs.com/thread-5592242-1-1.html ,不过源码要重新修改下,使用起来稍微麻烦点。
另外,我觉得的EasyFlash本身定位就是轻量级的闪存库,占用Flash量很小。即便你两边都引入,也不会浪费很多Flash,下图是stm32f10x的裸机Demo下的EasyFlash资源占用情况。

本帖子中包含更多资源

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

x

出10入0汤圆

发表于 2015-7-11 17:10:39 | 显示全部楼层
sunnydragon 发表于 2015-7-11 16:26
明白你的意思了~可以参考这个例子嘛http://www.amobbs.com/thread-5592242-1-1.html ,不过源码要重新修 ...

我觉得这个很有用。这样分段加载之后,代码更新的只是一部分,基本上可以把代码随便外发了。因为IAP的部分只是一小部分。不会导致产品核心外露了

非常感谢你

出0入0汤圆

发表于 2015-7-11 17:12:57 | 显示全部楼层
自动回滚  啥意思

还原为之前的数据么?

出0入198汤圆

 楼主| 发表于 2015-7-11 20:46:21 | 显示全部楼层
huike 发表于 2015-7-11 17:10
我觉得这个很有用。这样分段加载之后,代码更新的只是一部分,基本上可以把代码随便外发了。因为IAP的部 ...

是的~分段加载的灵活性是强了很多。
我觉得你还可以配合EasyFlash的Env功能实现外部方法地址及参数的的保存。

出0入198汤圆

 楼主| 发表于 2015-7-11 20:47:38 | 显示全部楼层
ljt80158015 发表于 2015-7-11 17:12
自动回滚  啥意思

还原为之前的数据么?


是的~还原为上次保存的数据。不开启这个模式的话,保存时异常掉电再重启后,数据就直接被还原为默认了~

出0入0汤圆

发表于 2015-7-11 21:44:19 | 显示全部楼层
支持              

出0入0汤圆

发表于 2015-7-11 23:16:34 | 显示全部楼层
这个存放日志保存的时间怎么设置,如果外部设置的时间混乱是不是也会造成日志时间混乱?

出0入198汤圆

 楼主| 发表于 2015-7-12 09:24:09 | 显示全部楼层
tian_zi 发表于 2015-7-11 23:16
这个存放日志保存的时间怎么设置,如果外部设置的时间混乱是不是也会造成日志时间混乱? ...

日志的保存时间是通过日志库在保存日志时,主动调取用户的当前时间(https://github.com/armink/EasyLo ... rt/elog_port.c#L106)。
如果用户提供的时间不正确,日志保存的时间肯定会出现问题的。

出0入0汤圆

发表于 2015-7-12 10:46:41 | 显示全部楼层
这个顶试下看                       

出0入0汤圆

发表于 2015-7-12 21:25:39 | 显示全部楼层
好东西   下载了   谢谢分享。。。

出0入0汤圆

发表于 2015-7-12 22:06:53 | 显示全部楼层
我在公司也实现过跟ENV相同功能的东西, easyFlash的接口是(char *key, char*val)的, 我弄过的接口是 (u32 key, u8 *buf, u32 len)的.你那个接口保存字符串方便,但是保存数组不方便啊.

出0入198汤圆

 楼主| 发表于 2015-7-13 08:00:19 | 显示全部楼层
本帖最后由 sunnydragon 于 2015-7-13 08:02 编辑
fshunj 发表于 2015-7-12 22:06
我在公司也实现过跟ENV相同功能的东西, easyFlash的接口是(char *key, char*val)的, 我弄过的接口是 (u32 k ...


要知道字符串是万能的,不仅仅能够对各种类型实现互转,如果在字符串中增加'&'之类的连接符,一样可以实现数组的互转。如果想很方便的存储、读取数组,自己在应用层再封装个字符串与数组互转的方法就行啦。

出0入0汤圆

发表于 2015-7-13 08:35:35 | 显示全部楼层
是一款开源的轻量级嵌入式Flash存储器库

出0入0汤圆

发表于 2015-7-13 09:55:25 | 显示全部楼层
不错,已经试用了一下,节省了我们做重复劳动的工作,

出0入0汤圆

发表于 2015-7-13 10:08:13 | 显示全部楼层
厉害,关键还开源,不得不顶。

出0入0汤圆

发表于 2015-7-13 10:09:58 | 显示全部楼层
很使用的资料哦

出0入0汤圆

发表于 2015-7-13 13:18:48 | 显示全部楼层
谢谢。下载看看。

出0入8汤圆

发表于 2015-7-13 13:37:01 | 显示全部楼层
不用看了,绝对好东西,直接顶……以后拿来用

出0入0汤圆

发表于 2015-7-13 14:51:08 | 显示全部楼层
哇,这个真的是好东西,下载学习。。。谢谢楼主啦!

出0入0汤圆

发表于 2015-7-13 15:11:20 | 显示全部楼层
这个真心不错啊,楼主V5
要是Key-Value中能加入类型(字符,二进制,整数,日期)和长度,就更节约Flash空间,而且统一了数据转换逻辑,更像数据库了。

出0入0汤圆

发表于 2015-7-13 15:39:09 | 显示全部楼层
51楼 意见+1,望楼主考虑,刚刚已经移植到cc2530上了,用着不错,谢谢楼主贡献。

出0入198汤圆

 楼主| 发表于 2015-7-13 17:05:37 | 显示全部楼层
jathenal 发表于 2015-7-13 15:11
这个真心不错啊,楼主V5
要是Key-Value中能加入类型(字符,二进制,整数,日期)和长度,就更节约Flash空 ...

好的~可以给EasyFlash添加一个插件,支持常用类型的解析,保证EasyFlash的简洁性~

哪些类型是大家比较常用的呢,我可以优先支持,需要的大家在后面跟帖留言。

出0入198汤圆

 楼主| 发表于 2015-7-13 17:11:44 | 显示全部楼层
WorldFly 发表于 2015-7-13 15:39
51楼 意见+1,望楼主考虑,刚刚已经移植到cc2530上了,用着不错,谢谢楼主贡献。 ...

它的建议已经列入计划内了,到时候这个功能会以插件的形式提供~

另外,方便把CC2530相关的EasyFlash移植添加到Demo中吗?(https://github.com/armink/EasyFlash/tree/master/demo),这样方便更多的人去使用EasyFlash。

出0入0汤圆

发表于 2015-7-13 17:29:41 | 显示全部楼层
有机会试用下

出0入0汤圆

发表于 2015-7-13 21:22:10 | 显示全部楼层
有某个参数修改是所有参数打包一起随机存储?还是该参数单独随机存储?
如果是单个的话如果参数比较多启动时搜索加载会比较耗时,打包一起存储的话频繁修改某几个参数又比较费空间,在空间比较紧张时FLASH寿命也得考虑,不知道楼主这方便怎么折中考虑,以前用的都是E2PROM、FRAM来弄不需要考虑这些,毕竟FLASH寿命只有100K,并且随着擦写次数增多擦写时间会越来越长,目前想到的是尽量减小写FLASH,定时写或者配合掉电检测在掉电时立即写

出0入198汤圆

 楼主| 发表于 2015-7-13 21:44:11 | 显示全部楼层
again 发表于 2015-7-13 21:22
有某个参数修改是所有参数打包一起随机存储?还是该参数单独随机存储?
如果是单个的话如果参数比较多启动 ...

1、目前的机制比较简单,所有参数都是先在缓存中处理,需要保存时调用保存API即可。如果某个参数修改后需要保存,那么所有都需要重新储存的。
2、我觉得到底是立刻保存、定时保存还是掉电时再保存取决于用户产品需求。
    例如:
        产品A,参数修改频繁,存在随机掉电可能,那么设计好的硬件掉电保护同时增加掉电检测立刻保存才是可靠的解决方案;
        产品B,参数修改不频繁,那么选择修改后立刻保存时最简单的解决方式;
   

出0入0汤圆

发表于 2015-7-14 15:12:26 | 显示全部楼层
比如STM32F4,用最后的一个sector来存数据,共128K,是不是可以考虑把空间分成固定大小的区域,用仿照官方那个Flash模拟EEPROM的方式去存数据,以减少片内Flash的擦除次数?

出0入198汤圆

 楼主| 发表于 2015-7-14 19:26:49 | 显示全部楼层
Achin 发表于 2015-7-14 15:12
比如STM32F4,用最后的一个sector来存数据,共128K,是不是可以考虑把空间分成固定大小的区域,用仿照官方 ...

这个优化方案我是有考虑过的。当前的库存在的模式组合问题,所以处理起来不那么容易,这个已经在我的Todo List里了。你可以Watch在Github上的项目,这样就可以及时收到的项目的最新消息~

出0入0汤圆

发表于 2015-7-15 09:03:19 | 显示全部楼层
楼主很有 恒心啊  一直坚持着!!!

出0入0汤圆

发表于 2015-7-16 02:17:13 | 显示全部楼层
强烈地学习一下!!

出0入0汤圆

发表于 2015-7-16 23:01:14 来自手机 | 显示全部楼层
spi 串行flash  适用么?

出0入198汤圆

 楼主| 发表于 2015-7-17 08:22:01 | 显示全部楼层
ljt80158015 发表于 2015-7-16 23:01
spi 串行flash  适用么?


适用的~库里面封装了Flash移植接口,适用所有Flash。

出0入0汤圆

发表于 2015-7-17 08:43:41 | 显示全部楼层
支持了,有机会试用下。thanks

出0入0汤圆

发表于 2015-7-17 08:48:19 | 显示全部楼层
收藏,有时间试一下。

出0入0汤圆

发表于 2015-7-17 09:25:48 | 显示全部楼层
学习了解一下

出100入18汤圆

发表于 2015-7-17 12:38:49 | 显示全部楼层
看着相当不错的说!

出0入76汤圆

发表于 2015-7-17 23:10:23 | 显示全部楼层
sunnydragon 发表于 2015-7-13 21:44
1、目前的机制比较简单,所有参数都是先在缓存中处理,需要保存时调用保存API即可。如果某个参数修改后需 ...

谢谢分享。

借此,我也来谈谈我的方法: 基本与您类似,如果产品在使用中修改比较频繁的话, 掉电存储比较好; 若只是偶尔修改的话, 在设定好参数后, 随即保存。
按理来说,掉电存储应该是比较合理的, 但这样要增加硬件电路(至少有大容量电容,以保证有足够的时间掉电时间内完成保存操作)。
如果是使用STM32等芯片, 可以配合使用PVD功能, 或者使用ADC+AWD(模拟看门狗),实现掉电检测, 可以简化外部掉电检测电路。

对于配置参数, 我采用了一个参数表格的方式, 以结构体类型的方式, 对应用中要使用到的配置参数, 按功能(模块)方式进行了分类, 最后组合成一个大的参数表格(也是结构体)。
这样非常方便,上电时,从存储器中加载参数, 直接就可以把这个参数表当作缓冲区了(数据目标对象), 一次性加载了所有参数, 并且也方便后续对参数的有效性进行验证(不光是存取错误哦, 还有数据的不合法性);
在掉电时, 直接把这个参数表作为数据源, 一次性存储所有参数。 并且这样的话,也非常方便分段保存与读取 (以参数结构体的偏移量offset, 及其相应的字节大小sizeof)。


出0入0汤圆

发表于 2015-7-18 00:00:59 | 显示全部楼层
继续顶,准备用起来呢~

出0入198汤圆

 楼主| 发表于 2015-7-18 09:05:29 | 显示全部楼层
foxpro2005 发表于 2015-7-17 23:10
谢谢分享。

借此,我也来谈谈我的方法: 基本与您类似,如果产品在使用中修改比较频繁的话, 掉电存储 ...

1、跟我想的一样哈,不同的客户使用场景就得有不同的存储策略,这样才能把Flash最大限度的利用起来。

2、你的这种方式很不错啊,把通过结构体抽象把数据从顺序存储结构的Flash中加载进来,简洁方便!
我早期的做法还比较落后,并没有像你一样对数据做结构体抽象,只是简单的通过hash方式获取Flash指定位置的参数,这样的缺陷太明显:1、没法在软件运行后动态新增参数,不利于扩展及后期软件升级;2、程序中写死了参数的hash值,导致无法彻底删除参数;3、无法修改不定长的字符串参数值,例如:断言及硬件异常日志。
带着这些问题才设计开发了EasyFlash,我觉得它的最大优点就是对所有的参数用字符的方式序列化存储,序列化后数据大大提高了数据增删改的灵活性,也很大程度上保证了全类型参数的兼容性。

如果有更多想法欢迎继续探讨。也可以在Github上关注EasyFlash,并发起issue。

出0入198汤圆

 楼主| 发表于 2015-7-18 09:06:40 | 显示全部楼层
xwiron 发表于 2015-7-18 00:00
继续顶,准备用起来呢~

好啊~有问题可以在后面跟帖,欢迎分享使用感受及建议。

出0入8汤圆

发表于 2015-7-18 11:03:16 | 显示全部楼层
楼主,你好,试用成功,谢谢。

本帖子中包含更多资源

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

x

出0入8汤圆

发表于 2015-7-18 11:29:04 | 显示全部楼层
本帖最后由 Jmhh247 于 2015-7-18 11:30 编辑

我在试用过程中遇到个小问题,在normal mode下,程序死在ef_env.c中

  /* total_size must be aligned with erase_min_size */
    if (EF_USER_SETTING_ENV_SIZE % erase_min_size == 0) {
        EF_ASSERT(EF_USER_SETTING_ENV_SIZE == total_size);                /*  死在这一行 line 124 */
    } else {
        EF_ASSERT((EF_USER_SETTING_ENV_SIZE/erase_min_size + 1)*erase_min_size == total_size);
    }

查了源码发现提供的demo里STM32型号的 PAGE_SIZE 为2046,而我用的STM32型号的 PAGE_SIZE 为1024,
EF_USER_SETTING_ENV_SIZE 默认定义为(2 * 1024),
total_size = ENV_SECTION_SIZE 默认定义为 ERASE_MIN_SIZE,其中ERASE_MIN_SIZE =  PAGE_SIZE 。

我将ENV_SECTION_SIZE 定义为(2 * ERASE_MIN_SIZE)后,满足条件 EF_ASSERT(EF_USER_SETTING_ENV_SIZE == total_size);
试用通过。

现在想请教楼主在normal mode下 EF_ASSERT(EF_USER_SETTING_ENV_SIZE == total_size); 这个判断是出于何种考虑……
能否直接改成
/* ENV section total bytes size in normal mode. */
#define ENV_SECTION_SIZE          (EF_USER_SETTING_ENV_SIZE)

如果可以这样改动,用户可能就不用同时修改 EF_USER_SETTING_ENV_SIZE 和 ENV_SECTION_SIZE两个参数了吧?

      



出0入8汤圆

发表于 2015-7-18 11:41:03 | 显示全部楼层
另外,说一点个人的喜好,楼主不要介意呀,我实在是不喜欢“printf”这个函数,总是觉得它占用了太多的空间……如果楼主能自己写一个方法取代它实现 debug log 输出,相信你的闪存库能完成一点瘦身吧……最后再次感谢楼主分享,希望 EasyFlash 越来越好。

出0入198汤圆

 楼主| 发表于 2015-7-18 13:21:43 | 显示全部楼层
Jmhh247 发表于 2015-7-18 11:29
我在试用过程中遇到个小问题,在normal mode下,程序死在ef_env.c中

  /* total_size must be aligned wit ...

1、建议你先看下说明文档(https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md),我在里面特意有说明设置参数时的注意事项,看了有问题可以再跟帖哈。另外,强烈建议关注Githubhttps://github.com/armink/EasyFlash)上的最新项目(右上角Start & Watch),这样有更新会给你发邮件的,最近我对配置方式做了优化,更加人性化了,你的Demo需要重新从Github下载。


2、对于“printf”用户是可以自行选择的,这个地方是不能算库的体积范围内的,欢迎分享更多使用体验及感受哈~

本帖子中包含更多资源

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

x

出0入8汤圆

发表于 2015-7-18 13:39:47 | 显示全部楼层
sunnydragon 发表于 2015-7-18 13:21
1、建议你先看下说明文档(https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md),我在里面 ...

好的,谢谢回复……说来惭愧,我还真的没看过这个文档,现在去看看,同时关注一下。

出0入0汤圆

发表于 2015-7-18 13:47:55 | 显示全部楼层
这是做路由吗? 还是什么产品? 要这么强大的测试程序?

出0入0汤圆

发表于 2015-7-18 13:49:31 | 显示全部楼层
赞一个,easy Flash

出0入0汤圆

发表于 2015-7-18 16:51:37 | 显示全部楼层
稍微看了一下,发现一个问题,不知道是不是我想多了。

如果我是一个外置16M的spi flash,实际上我有几千个变量,变量都是字符串形式保存的,有的时候一个变量的长度有400bit。

如果我只变了几个参数,最后保存的时候,是不是也要把所有的数据全部写入?

这样的话保存一次数据岂不要很长时间(16M的flash,怎么也得几分钟吧)。

出0入198汤圆

 楼主| 发表于 2015-7-18 17:54:42 | 显示全部楼层
Jmhh247 发表于 2015-7-18 13:39
好的,谢谢回复……说来惭愧,我还真的没看过这个文档,现在去看看,同时关注一下。 ...

也说明我的引导工作可能没做好,你觉得该如何引导大家配置前看文档比较好呢?

出0入198汤圆

 楼主| 发表于 2015-7-18 17:59:45 | 显示全部楼层
wind2100 发表于 2015-7-18 13:47
这是做路由吗? 还是什么产品? 要这么强大的测试程序?

EasyFlash是闪存库,不局限任何一个产品,你可以用在:
1、产品上电的运行参数;
2、运行记录;
3、用户可编辑的参数;
4、软件断言及硬件异常等系统崩溃日志;
5、在线升级时的Bootloader与APP之间的交互参数;
6、更多需要断电记忆的功能……

另外,你说的“这么强大的测试程序?”指的什么测试程序?

出0入8汤圆

发表于 2015-7-19 12:37:13 | 显示全部楼层
sunnydragon 发表于 2015-7-18 17:54
也说明我的引导工作可能没做好,你觉得该如何引导大家配置前看文档比较好呢? ...

我是一个菜鸟,既然楼主问了,我是愿意说说我的看法,不当之处,希望不要介意。

首先,你做的已经足够好了,有API说明文档,有demo, 有良好的编程风格……
如果能够让大家用够少的时间成本完成EasyFlash的上手使用,我觉得在引导方面需要一个有关的基础,
这个基础就是一份“移植说明”(我觉得“移植说明”与“API说明”是两码事),这里需要说明一下我只是
粗略看了一下,可能在楼主的文档里存在这份“移植说明”,是我没发现,我一直比较担忧自己智商的一
点就是容易大意,如果有,希望楼主不要打我呀……接着说正经的,我想在移植说明里可以指出哪些是
需要跟据用户的平台可能需要修改的宏,修改这些宏有什么注意事项等。

比如说我在试用的时候遇到那个问题,就是因为没搞明白ENV_USER_SETTING_SIZE  与
ENV_SECTION_SIZE (Github最新的代码中已经改为ENV_AREA_SIZE)的关系导致出错,
现在看来 ENV_USER_SETTING_SIZE 只能是小于等于 ENV_AREA_SIZE的,我上次只关心
ENV_USER_SETTING_SIZE这个宏,结果搞悲剧了,它的值大于ENV_SECTION_SIZE,看
了源码才查出问题点。

啰嗦这么多,最后楼主有时间的话,可以看下这个帖[分享][交流]发一个通用按键模块,简单易用
我个人觉得它在引导方面讲的挺好的。


出0入0汤圆

发表于 2015-7-20 09:34:51 | 显示全部楼层
sunnydragon 发表于 2015-7-18 17:59
EasyFlash是闪存库,不局限任何一个产品,你可以用在:
1、产品上电的运行参数;
2、运行记录;

我理解,是测试程序稳定性的测试程序,我编译了一下有32K,很大啊,
我不知道作者的初衷,是用来做什么?

还可以用于升级程序,其实现在用户最希望的就是通过USB去升级程序,这样方便。还可以通过这个USB充电。

出0入0汤圆

发表于 2015-7-20 10:47:02 | 显示全部楼层
好东西,这个要测试下。

出0入0汤圆

发表于 2015-7-20 10:51:39 | 显示全部楼层
自己已经做了个BOOT,BOOT和APP的参数做了Struct 存入Fllash固定开始地址, Struct后带CRC,APP始终使用最后一个CRC相等结构。
有时间研究研究楼主这个,学习一下。

出0入198汤圆

 楼主| 发表于 2015-7-21 13:15:09 | 显示全部楼层
Jmhh247 发表于 2015-7-19 12:37
我是一个菜鸟,既然楼主问了,我是愿意说说我的看法,不当之处,希望不要介意。

首先,你做的已经足够好 ...

恩,移植文档是应该有的,之前把移植相关的内容和API文档放在一起,有点乱,这块我再完善下。

你的这个问题,是没有看懂我写的参数配置说明,不知道这句话中哪里写的有歧义,你也可以提提建议。

本帖子中包含更多资源

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

x

出0入198汤圆

 楼主| 发表于 2015-7-21 13:25:15 | 显示全部楼层
wind2100 发表于 2015-7-20 09:34
我理解,是测试程序稳定性的测试程序,我编译了一下有32K,很大啊,
我不知道作者的初衷,是用来做什么?
...

1、你用的是带操作系统的Demo吧?如果用了操作系统,还有了固件库,ROM肯定会变大,不过很多东西都可以优化,例如量产时去掉Debug宏,等等还能较低不少ROM。。。EasyFlash自身占用ROM是非常小的,可以看上30楼我的截图。

2、“我不知道作者的初衷,是用来做什么?”,你的问题是不明白Demo的做什么用处?

3、升级程序的接口跟EasyFlash无任何关系,建议先仔细看下EasyFlash的介绍文档吧 https://github.com/armink/EasyFlash#easyflash

出0入198汤圆

 楼主| 发表于 2015-7-21 13:34:27 | 显示全部楼层
jungleyang 发表于 2015-7-20 10:51
自己已经做了个BOOT,BOOT和APP的参数做了Struct 存入Fllash固定开始地址, Struct后带CRC,APP始终使用最后 ...

好啊,多交流~EasyFlash不只是能够存储简单的参数,它所存储的参数都不限制类型,不限制长度,支持动态扩展,这点为后期软件升级提供支持。另外,有其他Flash存储需求也可以跟帖留言。

出0入8汤圆

发表于 2015-7-21 15:29:48 | 显示全部楼层
sunnydragon 发表于 2015-7-21 13:15
恩,移植文档是应该有的,之前把移植相关的内容和API文档放在一起,有点乱,这块我再完善下。

你的这个 ...

之前我遇到的问题是我自身的问题(未看文档,汗),你的配置文档写的很清楚,无歧义,期待有更多的开源。

出0入0汤圆

发表于 2015-7-21 16:01:05 | 显示全部楼层
学习一下         

出0入0汤圆

发表于 2015-7-21 21:50:24 来自手机 | 显示全部楼层
支持nand flash吗

出0入0汤圆

发表于 2015-7-21 22:31:32 | 显示全部楼层
不知道是否支持TI M3/M4这种内置BOOT-LOADER/ROM driver的芯片

出0入0汤圆

发表于 2015-7-22 08:45:02 | 显示全部楼层
sunnydragon 发表于 2015-7-21 13:25
1、你用的是带操作系统的Demo吧?如果用了操作系统,还有了固件库,ROM肯定会变大,不过很多东西都可以优 ...

现在的产品,有一个重要功能是用户想需要的,就是通过USB或是网络去升级他们的程序。
如果能做成一套,并提供技术支持,将有利于这个库的发展.

出0入0汤圆

发表于 2015-7-22 10:07:06 | 显示全部楼层
又更新了,支持,谢谢分享~

出0入0汤圆

发表于 2015-7-22 10:10:32 | 显示全部楼层
强悍~~这个有空测试一下

出0入0汤圆

发表于 2015-7-22 10:17:44 | 显示全部楼层
NANDflash可以用吗,支持坏块处理吗?

出0入198汤圆

 楼主| 发表于 2015-7-22 12:03:29 | 显示全部楼层
Jmhh247 发表于 2015-7-21 15:29
之前我遇到的问题是我自身的问题(未看文档,汗),你的配置文档写的很清楚,无歧义,期待有更多的开源。 ...

移植文档写好了,你看下有没有需要改进的?https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md

出0入198汤圆

 楼主| 发表于 2015-7-22 12:04:42 | 显示全部楼层

必须支持的。EasyFlash提供了Flash的通用移植接口,参考其他Flash移植的Demo,修改一个移植文件即可。移植时有问题可以再跟帖留言哈。

出0入198汤圆

 楼主| 发表于 2015-7-22 12:08:30 | 显示全部楼层
爱在丽江 发表于 2015-7-21 22:31
不知道是否支持TI M3/M4这种内置BOOT-LOADER/ROM driver的芯片

没用过TI的M3/M4,可否把你的需求说详细点?

出0入198汤圆

 楼主| 发表于 2015-7-22 12:11:21 | 显示全部楼层
wind2100 发表于 2015-7-22 08:45
现在的产品,有一个重要功能是用户想需要的,就是通过USB或是网络去升级他们的程序。
如果能做成一套,并 ...

好啊~有兴趣可以联系我(见签名)。

出0入198汤圆

 楼主| 发表于 2015-7-22 12:16:36 | 显示全部楼层
wangyeqing333 发表于 2015-7-22 10:17
NANDflash可以用吗,支持坏块处理吗?

1、支持NANDflash的。EasyFlash提供了Flash的通用移植接口,参考其他Flash移植的Demo,修改一个移植文件即可。移植时有问题可以再跟帖留言哈。
2、EasyFlash自带磨损平衡模式恐怕没法完全解决NANDflash坏块。不过可以给EasyFlash增加一个NANDflash坏块管理插件,难度应该不是很大,有兴趣可以一起讨论下。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-12-2 03:41

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

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