搜索
bottom↓
回复: 73
打印 上一主题 下一主题

【升级】EasyFlash 环境变量功能新增类型转换插件

  [复制链接]

出0入198汤圆

跳转到指定楼层
1
发表于 2016-2-21 22:18:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunnydragon 于 2016-2-21 22:18 编辑

目前 EasyFlash 会将环境变量以字符串形式存储于 Flash 中,在这种模式下,对于非字符串类型的环境变量在使用时,就必须得增加额外的字符串转换代码。

设计 Types 插件就是为了方便用户在使用 EasyFlash 时,以更加简单的方式去操作各种类型的环境变量,降低用户使用难度。

主要支持的类型包括:C 的 基本类型数组类型 以及 结构体类型
详细的使用方法可以参考 Github 上的说明文档:https://github.com/armink/EasyFl ... flash/plugins/types

下载地址:
本坛下载:

新的一年 EasyFlash 还有更多更实用功能有待开发,欢迎大家多提宝贵建议。正是有了大家的建议和反馈,才使得 EasyFlash 变得足够完善,大家的支持是也我坚持开源的动力




本帖子中包含更多资源

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

x

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

“你必须好好活下去,任何时候都不要失去勇气。我们都会走过这个困难的时代。”
——《黄河绝恋》(1999)

出0入198汤圆

来自 37楼
 楼主| 发表于 2016-5-12 23:09:29 | 只看该作者
闪客 发表于 2016-4-21 08:35
感谢你的回复。

今天看了一下port.md,又进行了些许更新。更加清晰了。

跟大家汇报下进度,最近一直在思考 SPI Flash Demo平台的选择,由于厂商及型号众多,所以目前我有想法做一个 SPI Flash 的万能驱动库,以便于让大家更方便的去使用 EasyFlash 。

实现的思路是这样的,SPI 接口驱动层提供出移植接口,同时也支持软件模拟 SPI 的方式,接下来是获取串行Flash的规格信息,支持两种方案,1、用户自己自行设定必选参数。2:通过 JESD216 标准规定的 SFDP 参数规范要求,读取 Flash 规格参数,如果此 SPI Flash 不支持 SFDP ,则根据产品的 VID 及 PID ,查找静态参数表来确定参数,当然这个参数表是需要逐步完善的。我也有调查过,市面的大部分厂家对于超过 8Mbit 容量的 SPI Flash 都有支持 SFDP 规范,但也有少数企业像 Atmel 是不支持的,但我认为 JESD216 标准是个趋势,未来将会有更多 Flash 厂家执行这个标准。

大家也可以说下自己的想法,欢迎讨论,如果这个驱动库对大家没有什么吸引力,也许我就会放弃开发了。

出0入8汤圆

2
发表于 2016-2-21 22:24:26 | 只看该作者
有没有对数据采集存储的解决方案?
比如我每分钟保存一条数据, 单片机可以根据时间条件检索或者删除某一条或几条数据

出0入0汤圆

3
发表于 2016-2-21 22:24:32 | 只看该作者
啥也不说了。顶一顶楼主

祝楼主新年快乐,快乐开源

出0入198汤圆

4
 楼主| 发表于 2016-2-22 08:11:56 | 只看该作者
liwei_jlu 发表于 2016-2-21 22:24
有没有对数据采集存储的解决方案?
比如我每分钟保存一条数据, 单片机可以根据时间条件检索或者删除某一条 ...

EasyFlash 的环境变量功能本身就是数据以 Key-Value 方式持久化到 Flash 上,相当于一个小型的 NoSQL 数据库。

你可以参考下这篇文章:浅谈 Redis 数据库的键值设计(http://www.oschina.net/question/12_27517  ),EasyFlash 使用与 Redis 很相似,操作起来也非常灵活,你的这个需求完全能够满足。

出20入0汤圆

5
发表于 2016-2-22 09:36:07 | 只看该作者
  谢谢分享,试用下。

出0入8汤圆

6
发表于 2016-2-22 12:53:09 | 只看该作者
sunnydragon 发表于 2016-2-22 08:11
EasyFlash 的环境变量功能本身就是数据以 Key-Value 方式持久化到 Flash 上,相当于一个小型的 NoSQL 数 ...

数据以 Key-Value 存储,
如果每分钟存一条,一年就是50万条,是不是就需要建立50万个Key(key1 - key50W),来对应50万个值?
中间删除某几条数据(key2K-key3k),是否会产生存储空间碎片,还是可以对这个存储空间回收?
另外有没有考虑flash的擦写平衡,用这个来管理数据log的话,应该需要建立个环境变量来保持采集数据总数,一年下来应该超过flash寿命了。

出0入198汤圆

7
 楼主| 发表于 2016-2-22 21:00:58 | 只看该作者
本帖最后由 sunnydragon 于 2016-2-22 21:02 编辑
liwei_jlu 发表于 2016-2-22 12:53
数据以 Key-Value 存储,
如果每分钟存一条,一年就是50万条,是不是就需要建立50万个Key(key1 - key50W ...


1、目前的模式是把所有的环境变量都有先在内存中进行缓存,完成增删改查后,用户需自行执行存储操作,将所有的环境变量存储到 Flash 中。所以你说的“存储空间碎片”是不存在的。

2、Flash 的磨损平衡是有支持的,用户可以自行选择是否开启“写平衡”模式,默认不开启。

3、就像你最后说的,你也可以使用 EasyFlash 的 Log 功能来存储这些参数,只需定义日志的最大长度即可,超出的日志会自动覆盖早期的日志,所以无需定义“采集数据总数”环境变量,库本身提供了获取日志已存储容量的方法。

出0入0汤圆

8
发表于 2016-2-22 21:46:14 | 只看该作者
为什么,只需要使用一个BLOCK 16K的,非得在里面定义最小两个?

出0入8汤圆

9
发表于 2016-2-22 22:02:27 | 只看该作者
sunnydragon 发表于 2016-2-22 21:00
1、目前的模式是把所有的环境变量都有先在内存中进行缓存,完成增删改查后,用户需自行执行存储操作,将 ...

感谢热心回复。仍然有如下疑问:
1 目前的模式是把所有的环境变量都有先在内存中进行缓存,完成增删改查后
如果我有50w条数据,需建立50W个key-value,这些无法全部缓存到ram中,是否是需要一部分就缓存一部分?
删除中间第2K条数据,那么保存的操作应该是把2001条数据以后的flash擦除后全部重新写入吧?

3 easyflash是否支持多种log的同时存在?
比如 我定义一个flash的0-1MB为 A类型数据的log,有10W条记录;  2-8MB为B类型的操作log,有2W条记录。
A类型与B类型的操作频率、保存结构完全不同,需要分别保存。

出0入0汤圆

10
发表于 2016-2-22 22:18:35 | 只看该作者
liwei_jlu 发表于 2016-2-21 22:24
有没有对数据采集存储的解决方案?
比如我每分钟保存一条数据, 单片机可以根据时间条件检索或者删除某一条 ...

也有类似的需求

出0入198汤圆

11
 楼主| 发表于 2016-2-24 11:00:55 | 只看该作者
liwei_jlu 发表于 2016-2-22 22:02
感谢热心回复。仍然有如下疑问:
1 目前的模式是把所有的环境变量都有先在内存中进行缓存,完成增删改查 ...

1、关于第一个问题,由于 EasyFlash 目前主要定位是以参数存储为主,所以你的大数量记录需求由于资源占用问题,很难用 EasyFlash 的环境变量功能来实现。在今年的开发计划中,有新增轻量模式的计划,此时的环境变量一方面可以直接将其 Value 经过压缩,直接存储至 Flash 中,不需要转换为字符串格式,同时会取消内存缓存。

2、目前不支持分区日志,所有的日志只允许一种方式进行存储。不过如果想要支持,难度也不太大,需要将现有代码面向对象化即可,如果有兴趣,我可以协助你完成这个工作。

出0入8汤圆

12
发表于 2016-2-24 11:12:26 | 只看该作者
sunnydragon 发表于 2016-2-24 11:00
1、关于第一个问题,由于 EasyFlash 目前主要定位是以参数存储为主,所以你的大数量记录需求由于资源占用 ...

“将现有代码面向对象化”
是指定义不同的函数结构体,分别把API函数赋值给结构体内的函数指针吗? 这样是否还需要修改每个easyflash函数的flash占用空间地址范围?

如果不分区日志,就面临一个问题:所有日志共同使用一个分区,日志分区大小固定,写满后从头开始写、覆盖原有日志,可能某个操作频繁的日志会覆盖掉其他类型的日志。

出0入0汤圆

13
发表于 2016-2-24 11:31:46 | 只看该作者
EasyFlash  越来越强大!

出0入198汤圆

14
 楼主| 发表于 2016-2-24 17:49:52 | 只看该作者
liwei_jlu 发表于 2016-2-24 11:12
“将现有代码面向对象化”
是指定义不同的函数结构体,分别把API函数赋值给结构体内的函数指针吗? 这样 ...

具体实现的时候需要定义各个分区的对象,这些对象的配置在宏定义中完成,然后再给各个函数增加 分区 作为入参即可。

出0入0汤圆

15
发表于 2016-4-9 19:56:23 | 只看该作者
sunnydragon 发表于 2016-2-24 17:49
具体实现的时候需要定义各个分区的对象,这些对象的配置在宏定义中完成,然后再给各个函数增加 分区 作为 ...



移植EasyFlash的时候,就报这些错, 看看全是 EF_ASSERT的,我这该怎么处理呀

本帖子中包含更多资源

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

x

出0入198汤圆

16
 楼主| 发表于 2016-4-10 06:58:05 | 只看该作者
若非 发表于 2016-4-9 19:56
移植EasyFlash的时候,就报这些错, 看看全是 EF_ASSERT的,我这该怎么处理呀 ...

使用 Demo 中的工程有问题吗?

出0入0汤圆

17
发表于 2016-4-13 08:43:48 | 只看该作者
sunnydragon 发表于 2016-4-10 06:58
使用 Demo 中的工程有问题吗?

看着手册移植到新工程上报的错

出0入0汤圆

18
发表于 2016-4-13 13:47:44 | 只看该作者
真的是很好用啊。

出0入198汤圆

19
 楼主| 发表于 2016-4-13 21:24:58 | 只看该作者
若非 发表于 2016-4-13 08:43
看着手册移植到新工程上报的错

如果可以的话,建议把你的工程打包上传上来,这样更好分析。

出0入0汤圆

20
发表于 2016-4-14 22:20:01 | 只看该作者
学习了easyflash

出0入0汤圆

21
发表于 2016-4-19 14:59:10 | 只看该作者
一直关注着EasyFlash

我非常希望楼主能给出一个SPI Flash的Demo 或者其他外部flash的Demo,这样,能让大家更迅速地应用到项目当中。

我也试着移植了一下,到外部SPI Flash,但是由于项目时间紧,没有继续进行下去。

是不是在移植的时候不仅仅是修改Port.C中的函数?好像还有几个define要定义好?

谢谢!盼复。

出0入0汤圆

22
发表于 2016-4-19 15:19:47 | 只看该作者
对EasyFlash 很感兴趣,之前尝试过在F103RCT8上运行,能运行起来,因为水平爱low,IAP部分没有成功测试,最近没有项目,可以运行起来的话做个Demo 让大家测试下, 谢谢sunnydragon

出0入198汤圆

23
 楼主| 发表于 2016-4-19 18:28:51 | 只看该作者
闪客 发表于 2016-4-19 14:59
一直关注着EasyFlash

我非常希望楼主能给出一个SPI Flash的Demo 或者其他外部flash的Demo,这样,能让大家 ...

感谢关注哈,我争取一个月内释出一个外部 Flash 的 Demo。

出0入198汤圆

24
 楼主| 发表于 2016-4-19 18:29:49 | 只看该作者
fenglove 发表于 2016-4-19 15:19
对EasyFlash 很感兴趣,之前尝试过在F103RCT8上运行,能运行起来,因为水平爱low,IAP部分没有成功测试,最 ...

期待你的分享,有任何问题欢迎随时沟通交流~

出0入198汤圆

25
 楼主| 发表于 2016-4-19 21:47:21 | 只看该作者
闪客 发表于 2016-4-19 14:59
一直关注着EasyFlash

我非常希望楼主能给出一个SPI Flash的Demo 或者其他外部flash的Demo,这样,能让大家 ...

这里有详细的移植文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md

移植时重点就是修改 ef_port.c 及 ef_cfg.h 两个文件,ef_port.c 中主要是读、写、擦除 Flash 的方法,ef_cfg.h 主要是 EasyFlash 使用的 Flash 地址区域的定义,如果看懂上面的文档中的介绍,一点也不难的(但就是不知道我的文档大家到底有没有看明白,要是写的有合适的地方,大家多提建议)。

如果,你着急的话,可以自己先试下,有问题我可以协助你。如果不急那就先等等,我会在一个月内释出更加可靠、详细的外部 Flash Demo 。

出0入0汤圆

26
发表于 2016-4-20 08:19:22 | 只看该作者
sunnydragon 发表于 2016-2-22 21:00
1、目前的模式是把所有的环境变量都有先在内存中进行缓存,完成增删改查后,用户需自行执行存储操作,将 ...

也有这种需求,主要关心存储空间占用问题和FLASH写平衡,不知对于50W条数据会占用多大空间(如果按8字节一条)。

出0入0汤圆

27
发表于 2016-4-21 08:35:47 | 只看该作者
sunnydragon 发表于 2016-4-19 21:47
这里有详细的移植文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md

移植时重点 ...

感谢你的回复。

今天看了一下port.md,又进行了些许更新。更加清晰了。

我对“移植文档”,有个建议:

1. 增加每个函数的example,举个例子来说明这个函数怎么用,这样,很多时间紧的项目就直接照葫芦画瓢先用上了,国内很多开发人员因为时间问题可能不会去深入研究每个参数。

2. 增加多样性的Demo,例如,NAND Flash、SD Card、SPI Flash等等存储介质,让EasyFlash更加普及化。

不知恰当与否,还请sunnydragon斟酌。

出0入198汤圆

28
 楼主| 发表于 2016-4-21 11:52:36 | 只看该作者
单飞 发表于 2016-4-20 08:19
也有这种需求,主要关心存储空间占用问题和FLASH写平衡,不知对于50W条数据会占用多大空间(如果按8字节 ...

正如我 7 楼所说的 “目前的模式是把所有的环境变量都有先在内存中进行缓存……”,所以你这么大的数据量不太适合使用环境变量方式进行存储(当然,这类用户需求还是蛮大的,我这边也正在设计无 RAM 方式的环境变量存储模式,如有需要,请继续关注 EasyFlash 动态)。
7 楼还提到一种方式是使用 “可以使用 EasyFlash 的 Log 功能来存储这些参数……”,对于这种方式造成的麻烦就是删除数据不方便。

关于你说的写平衡功能,这点你可以放心,以上说的两种功能都支持写平衡。

出0入198汤圆

29
 楼主| 发表于 2016-4-21 12:02:59 | 只看该作者
闪客 发表于 2016-4-21 08:35
感谢你的回复。

今天看了一下port.md,又进行了些许更新。更加清晰了。


1、这点说的挺对的,虽然我这边要给大家提供了很全的 API 文档(https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md),但更多的只注重介绍功能,而忽略了入门使用方法,接下来继续提升用户体验吧。

2、SPI Flash 已经列入计划中了,一步步来吧,多谢你的建议

出0入0汤圆

30
发表于 2016-4-22 10:39:33 | 只看该作者
sunnydragon 发表于 2016-4-21 11:52
正如我 7 楼所说的 “目前的模式是把所有的环境变量都有先在内存中进行缓存……”,所以你这么大的数据量 ...

大数据存储,低空间消耗,掉电存储,FLASH写平衡,OS支持,循环擦写。。。这种需求不知道是不是EasyFlash的方向

出0入198汤圆

31
 楼主| 发表于 2016-4-22 20:44:47 | 只看该作者
单飞 发表于 2016-4-22 10:39
大数据存储,低空间消耗,掉电存储,FLASH写平衡,OS支持,循环擦写。。。这种需求不知道是不是EasyFlash ...

“掉电存储,FLASH写平衡,OS支持,循环擦写”这些现在都是有支持的。

“大数据存储,低空间消耗”这个特性仅在 Log 功能下支持,环境变量功能这块还是有很大提升空间的。

这块如果有更好的设计想法也可以分享下哈,大家一起集思广益,共同参与进来。

出0入0汤圆

32
发表于 2016-4-23 15:22:43 | 只看该作者
sunnydragon 发表于 2016-4-22 20:44
“掉电存储,FLASH写平衡,OS支持,循环擦写”这些现在都是有支持的。

“大数据存储,低空间消耗”这个 ...

抽空试试效率如何

出0入0汤圆

33
发表于 2016-4-24 09:29:57 | 只看该作者

  谢谢分享,试用下。

出0入0汤圆

34
发表于 2016-4-26 04:00:25 | 只看该作者
楼主,关于DEMO,你能否传已个完整的KEIL工程?

出0入198汤圆

35
 楼主| 发表于 2016-4-26 09:00:33 | 只看该作者
xyz2008 发表于 2016-4-26 04:00
楼主,关于DEMO,你能否传已个完整的KEIL工程?

这里不都有 Keil 工程吗?

本帖子中包含更多资源

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

x

出0入0汤圆

36
发表于 2016-5-12 16:42:17 | 只看该作者
现在也碰到大数据存到外部SPI flash,看这样子只能等easyflash支持后再用它实现了,持续关注中

出0入0汤圆

38
发表于 2016-5-16 13:48:53 | 只看该作者
sunnydragon 发表于 2016-5-12 23:09
跟大家汇报下进度,最近一直在思考 SPI Flash Demo平台的选择,由于厂商及型号众多,所以目前我有想法做 ...

太好了。

我比较倾向于支持符合 JESD216 标准SPI-FLASH驱动库

出0入0汤圆

39
发表于 2016-7-27 16:31:41 | 只看该作者
楼主。关于SPI-FLASH驱动库iap的demo怎么样了,一直期待这的

出0入198汤圆

40
 楼主| 发表于 2016-7-27 20:42:52 | 只看该作者
maxiang1985 发表于 2016-7-27 16:31
楼主。关于SPI-FLASH驱动库iap的demo怎么样了,一直期待这的

最近一直在忙着开源通用 SPI Flash 驱动库 SFUD:https://github.com/armink/SFUD     ,有了这个库,接下来再做 SPI Flash Demo 就会很简单了,这周会先把 环境变量 功能的 Demo 做出来。关于 IAP Demo 你有什么样的需求,因为我感觉 IAP Demo 的重点是流程,在这里(https://github.com/armink/EasyFlash/tree/master/demo/iap )已经做了一部分 IAP 的 Demo ,这个是能适用所有 Flash 的,只不过需要 RT-Thread 平台。

出0入0汤圆

41
发表于 2016-7-27 22:14:48 | 只看该作者
谢谢分享

出0入0汤圆

42
发表于 2016-7-28 08:31:16 | 只看该作者
本帖最后由 maxiang1985 于 2016-7-28 08:34 编辑
sunnydragon 发表于 2016-7-27 20:42
最近一直在忙着开源通用 SPI Flash 驱动库 SFUD:https://github.com/armink/SFUD     ,有了这个库,接 ...


其实我使用的功能很简单的,就是把固件放在spi Flash(W25Q128)中,使用iap功能,同时保存一些参数,
现在是直接驱动的,在w25q128中分区读写参数,写固件滴,
这些工作都是以已经做完的,只要是要用的是SPI Flash的,还有能否在论坛上上传你的Demo等资料,那个github下载太慢了。嘿嘿

出0入198汤圆

43
 楼主| 发表于 2016-7-28 13:38:50 | 只看该作者
maxiang1985 发表于 2016-7-28 08:31
其实我使用的功能很简单的,就是把固件放在spi Flash(W25Q128)中,使用iap功能,同时保存一些参数,
现 ...

刚把外部 SPI Flash 的 Demo 推送上去了,其实下载不一定只通过 GitHub ,我在 Coding: https://coding.net/u/armink/p/EasyFlash/git , OSChina: http://git.oschina.net/armink/EasyFlash ,也都有更新,这里永远是最新的。帮你下载了一个,。

另外,你需要的功能,直接使用 /demo/env/stm32f10x/non_os_spi_flash 目录下的最新 裸机平台外部 SPI Flash Demo 就行,里面有配置好的环境,也同样支持 IAP 。对于你说的 IAP 存储固件,也就是调用这里 (点击打开)几个 API 就能完成,在这个 Demo 里都可以直接使用,你试试吧。

本帖子中包含更多资源

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

x

出0入0汤圆

44
发表于 2016-7-28 14:19:19 | 只看该作者
sunnydragon 发表于 2016-7-28 13:38
刚把外部 SPI Flash 的 Demo 推送上去了,其实下载不一定只通过 GitHub ,我在 Coding: https://coding. ...

好的,多谢了

出0入0汤圆

45
发表于 2016-7-28 15:03:46 | 只看该作者
sunnydragon 发表于 2016-7-28 13:38
刚把外部 SPI Flash 的 Demo 推送上去了,其实下载不一定只通过 GitHub ,我在 Coding: https://coding. ...

好似论坛中EasyFlash-V2.07.28.zip中的SPI Flash Demo 这个编译通过不了地,嘿嘿

出0入198汤圆

46
 楼主| 发表于 2016-7-28 17:28:27 | 只看该作者
maxiang1985 发表于 2016-7-28 15:03
好似论坛中EasyFlash-V2.07.28.zip中的SPI Flash Demo 这个编译通过不了地,嘿嘿


晕~刚才不知道为什么 Keil 工程配置文件漏提交了,你现在重新去 Coding 或 OSChina 下载试试。

出0入198汤圆

47
 楼主| 发表于 2016-7-29 08:09:17 | 只看该作者
目前 EasyFlash 已经提供了针对 SPI Flash 的裸机平台 Demo ,位于 /demo/env/stm32f10x/non_os_spi_flash 目录下,大家可以直接去其 GitHub: https://github.com/armink/EasyFlash  ,OSChina: http://git.oschina.net/armink/EasyFlash ,Coding: https://coding.net/u/armink/p/EasyFlash/git 进行下载,也可以直接下载我这里刚下载好了版本

本帖子中包含更多资源

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

x

出0入0汤圆

48
发表于 2016-7-29 09:22:43 | 只看该作者
感恩楼主分享,谢谢。

出0入0汤圆

49
发表于 2016-7-29 09:25:57 | 只看该作者
学习了,谢谢分享

出0入0汤圆

50
发表于 2016-10-27 10:01:21 | 只看该作者
不知道楼主,STM32F4版的demo是否有了?呵呵

出0入198汤圆

51
 楼主| 发表于 2016-10-27 16:24:30 | 只看该作者
maxiang1985 发表于 2016-10-27 10:01
不知道楼主,STM32F4版的demo是否有了?呵呵

很早就有了,在这里:https://github.com/armink/EasyFl ... /demo/env/stm32f4xx  

出0入270汤圆

52
发表于 2016-10-27 17:57:29 | 只看该作者
没看懂楼主这个东西是用来干什么的,能仔细说一下吗

出0入0汤圆

53
发表于 2016-10-28 07:52:38 | 只看该作者
sunnydragon 发表于 2016-10-27 16:24
很早就有了,在这里:https://github.com/armink/EasyFlash/tree/master/demo/env/stm32f4xx  
...

多谢楼主了

出0入0汤圆

54
发表于 2016-11-2 13:36:39 | 只看该作者
本帖最后由 wofei3344 于 2016-11-2 13:42 编辑

一直收藏,希望有机会用起来,支持楼主~

一点儿小建议,希望在说明文件里增加上当前的版本号,这样更新后一看版本号就知道自己的文件是不是需要更新了

出0入198汤圆

55
 楼主| 发表于 2016-11-2 16:15:52 | 只看该作者
wofei3344 发表于 2016-11-2 13:36
一直收藏,希望有机会用起来,支持楼主~

一点儿小建议,希望在说明文件里增加上当前的版本号,这样更新后 ...


多谢支持,软件版本号在库的头文件中有定义~ 初始化的时候也会有输出。

出0入8汤圆

56
发表于 2016-11-2 16:40:35 | 只看该作者
刚看到这个帖子,去 github 瞄了一下,
给 LZ 说下我的一个小小看法,请看下面的代码:
  1. double ef_get_double(const char *key) {
  2.     char *value = ef_get_env(key);
  3.     if(value) {
  4.         return atof(value);
  5.     } else {
  6.         EF_INFO("Could't found this ENV(%s)!\n", key);
  7.         return NULL;
  8.     }
  9. }
复制代码

LOG 输出,我觉得 LZ 是否需要修正一下?
正确的写法,我觉得是:
  1. double ef_get_double(const char *key) {
  2.     char *value = ef_get_env(key);
  3.     if(value) {
  4.         return atof(value);
  5.     } else {
  6.         EF_INFO("Couldn't find this ENV(%s)!\n", key);
  7.         return NULL;
  8.     }
  9. }
复制代码

你怎么看?

出0入198汤圆

57
 楼主| 发表于 2016-11-2 20:26:35 | 只看该作者
security 发表于 2016-11-2 16:40
刚看到这个帖子,去 github 瞄了一下,
给 LZ 说下我的一个小小看法,请看下面的代码:

没有看出你这两段代码的区别。复制错了?

出0入8汤圆

58
发表于 2016-11-2 22:04:46 来自手机 | 只看该作者
sunnydragon 发表于 2016-11-2 20:26
没有看出你这两段代码的区别。复制错了?

代码逻辑没差异,
有差异的是 log 输出信息的英语语法。

出0入198汤圆

59
 楼主| 发表于 2016-11-3 07:50:33 | 只看该作者
security 发表于 2016-11-2 22:04
代码逻辑没差异,
有差异的是 log 输出信息的英语语法。

够细心嘛,确实漏了一个字母

出0入198汤圆

60
 楼主| 发表于 2016-11-3 08:25:04 | 只看该作者
security 发表于 2016-11-2 22:04
代码逻辑没差异,
有差异的是 log 输出信息的英语语法。

改好了,还有没有其他问题?

出0入8汤圆

61
发表于 2016-11-3 08:58:31 | 只看该作者
sunnydragon 发表于 2016-11-3 08:25
改好了,还有没有其他问题?

总感觉没针对代码逻辑提看法,有点找茬的赶脚,
原谅我对代码有处女座的情怀吧

还有一处,你没注意到,你参考下我上面贴的代码对比示例,
Couldn't 后跟的动词,应该是原型。

出0入198汤圆

62
 楼主| 发表于 2016-11-3 09:39:54 | 只看该作者
security 发表于 2016-11-3 08:58
总感觉没针对代码逻辑提看法,有点找茬的赶脚,
原谅我对代码有处女座的情怀吧 ,

竟然漏了一处。多提建议当然是好事哈~~越多越好 ~

出0入198汤圆

63
 楼主| 发表于 2016-11-4 09:04:53 | 只看该作者
security 发表于 2016-11-3 08:58
总感觉没针对代码逻辑提看法,有点找茬的赶脚,
原谅我对代码有处女座的情怀吧 ,

兄弟,你英语这么好,有没有时间一起来完善 EasyFlash 的英文文档?

出0入8汤圆

64
发表于 2016-11-5 08:34:26 | 只看该作者
sunnydragon 发表于 2016-11-4 09:04
兄弟,你英语这么好,有没有时间一起来完善 EasyFlash 的英文文档?

现阶段,有心而力不足啊,
一来,自己的英文,也就雷布斯的水准,只是刚好遇见略懂的。
二来,现阶段木有时间,现在的课余时间,几乎都是围绕孩子,至少要等孩子大了以后,才有时间去做事。

LZ 的开源项目,都是追求精品的品质的,期望后续,有机会可以合作。

出0入4汤圆

65
发表于 2016-11-7 08:45:42 | 只看该作者
问一下楼主:STM32在写入数据到flash的时候,如果出现中断怎么办。有没有做相应的处理?

出0入198汤圆

66
 楼主| 发表于 2016-11-7 16:08:05 | 只看该作者
xiaoergao 发表于 2016-11-7 08:45
问一下楼主:STM32在写入数据到flash的时候,如果出现中断怎么办。有没有做相应的处理? ...

有的,你看下移植接口中的 lock 及 unlock 方法。

出0入4汤圆

67
发表于 2016-11-7 20:27:51 | 只看该作者
如果是在中断中去写数据会不会引起异常?
比如,采用串口非空闲中断用来接收串口发过来的数据,然后将接收到的数据写入flash。

出0入198汤圆

68
 楼主| 发表于 2016-11-8 17:09:45 | 只看该作者
xiaoergao 发表于 2016-11-7 20:27
如果是在中断中去写数据会不会引起异常?
比如,采用串口非空闲中断用来接收串口发过来的数据,然后将接收 ...


不同的平台有不同的处理方法,例如:
裸机平台下:unlock,lock 可以使用开关中断,所以写 Flash 中断不开,即便有数据来,也不会影响写 Flash。
操作系统平台下:使用 sem 或 mutex作为锁,上次的正在写,还没写完,锁不会打开,新数据自然没法写入。

出0入0汤圆

69
发表于 2016-11-11 13:40:50 | 只看该作者
sunnydragon 发表于 2016-11-2 16:15
多谢支持,软件版本号在库的头文件中有定义~ 初始化的时候也会有输出。 ...

谢谢,我再仔细看一下

出0入0汤圆

70
发表于 2016-12-7 09:01:12 | 只看该作者
你好 ,我最近在用您的easyflash 发现初始化轮询整个空间寻找0xFF  需要很长时间  并且空间越大所需时间越长, 您的算法是保证有一个空间移植在写     
我的想法是始终保证有一个空的区域  也就是正在写的区域的后一个区域擦除掉   这样在初始化时  只需要检测 每个区域的指定量(比如20个)数据来判断该区域是否为空   然后进行空区域的前一个区域的内部查找   

出0入198汤圆

71
 楼主| 发表于 2016-12-7 09:28:19 | 只看该作者
heianshaonian 发表于 2016-12-7 09:01
你好 ,我最近在用您的easyflash 发现初始化轮询整个空间寻找0xFF  需要很长时间  并且空间越大所需时间越 ...

这也是个不错的优化方法,牺牲空间换时间喽。后期可以考虑改改。

我日志现在基本都存在片内 Flash ,STM32F4 的话,一般最后面 256K 存日志,初始化时间是毫秒级的,所以几乎没有感觉。你现在日志是存储什么平台?大概用了多少个扇区?多少初始化时间?

出0入0汤圆

72
发表于 2016-12-20 09:20:19 | 只看该作者
本帖最后由 heianshaonian 于 2016-12-20 10:04 编辑
sunnydragon 发表于 2016-12-7 09:28
这也是个不错的优化方法,牺牲空间换时间喽。后期可以考虑改改。

我日志现在基本都存在片内 Flash ,STM ...


我后面更改为,判断存储区状态时  提取片区 前32字节 和 后32字节  来判断   取结束地址仍然按照原来的片区扫描

你程序读数据快 是因为你使用内部的flash 外部flash要通过spi  我使用的频率是25MHz  这种片区扫描要慢很多
m25p40  8个扇区 1个扇区64K  我还是想换个4K一个扇区的  应该会快些

我在这样更改后 查询地址时间大大滴减少了


出0入0汤圆

73
发表于 2016-12-20 10:02:23 | 只看该作者
貌似不错的样子!!!!!!!!!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2023-11-30 01:31

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

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