搜索
bottom↓
12
返回列表 发新帖
楼主: sunnydragon

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

  [复制链接]

出0入198汤圆

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

暂时没有裸机Demo,你可以先用RTT的IAP demo搞懂基本流程,再想办法移植到裸机上。

出0入0汤圆

发表于 2017-8-25 00:20:24 | 显示全部楼层
EF_ERASE_MIN_SIZE 是个神马意义? 6*EF_ERASE_MIN_SIZE又是个神马,备分区别以EF_ERASE_MIN_SIZE 6份??如是是128*6*1024,都快1M的了,一共才256Kflash,怎么用?存一个字符,也要700多K?

出0入0汤圆

发表于 2017-8-25 00:25:37 | 显示全部楼层
按 EF_ERASE_MIN_SIZE  对齐又是个神马,1K的按128K对齐?

出0入4汤圆

发表于 2018-3-21 14:17:08 | 显示全部楼层
请教一下楼主,最近在试用您开源的 EasyFlash,目前 ENV 功能基本上调好了,但是 Log 的功能目前还是不会用。 请教一下:
1、Flash初始化之后,调用 ef_log_get_used_size()   查询到使用量为0
2、然后建立了一个测试数组,写入日志
        u32 log[3]={123,456,789};
        ef_log_write(log, 12);
遇到的现象,第一次写入后,使用  ef_log_get_used_size()  查询使用量是 64, 重复第二次写入相同的数据, 查询使用量变成了 96, 第三次写入后,查询到的使用量是 120, 这个我就糊涂了, 怎么重复写入相同的数据, 每次的使用量的增量不一致呢?   那这种情况下, 我读数据就不知道怎么做了, 比如我写入了 10次log,想要使用 ef_log_read(size_t index, uint32_t *log, size_t size); 函数读取中间3次的log,不知道参数怎么确定了。

其实我的应用也很简单,按照一定的时间间隔(比如1分钟)往Flash里面存数据,数据不需要删除,不需要改写, 而且每组数据的写入量是一致的, 只要存储器满了之后,能循环覆盖就可以了。  然后需要的时候,我能读取中间一些组数据。  这个功能 EasyFlash 的Log功能能实现吗?

出0入0汤圆

发表于 2018-3-21 14:38:31 | 显示全部楼层
这个可以学习。

出0入0汤圆

发表于 2018-3-21 14:48:38 | 显示全部楼层
  谢谢分享

出0入198汤圆

 楼主| 发表于 2018-3-21 22:17:56 | 显示全部楼层
huchunlei 发表于 2018-3-21 14:17
请教一下楼主,最近在试用您开源的 EasyFlash,目前 ENV 功能基本上调好了,但是 Log 的功能目前还是不会用 ...

日志写满了会自动删除最早存储的日志,但删除中间的还做不到。

ef_log_read 这个接口可以看下它的参数说明,意思就是从指定的位置开始读取,读取 size 个字节

  1. /**
  2. * Read log from flash.
  3. *
  4. * @param index index for saved log.
  5. *        Minimum index is 0.
  6. *        Maximum index is ef_log_get_used_size() - 1.
  7. * @param log the log which will read from flash
  8. * @param size read bytes size
  9. *
  10. * @return result
  11. */
复制代码


你的日志写入数量不一致问题,我还真没遇到呢,一般只是每个扇区头会有 LOG_SECTOR_HEADER_SIZE 长度存储扇区状态,所以略有差异。

出0入0汤圆

发表于 2018-3-22 08:50:38 | 显示全部楼层
这个比yaffs fatfs spifs 这些文件系统有啥差异和优势?

出0入198汤圆

 楼主| 发表于 2018-3-22 10:29:51 | 显示全部楼层
fcmer2016 发表于 2018-3-22 08:50
这个比yaffs fatfs spifs 这些文件系统有啥差异和优势?

资源占用小,无需文件系统

出0入4汤圆

发表于 2018-3-22 14:58:18 | 显示全部楼层
sunnydragon 发表于 2018-3-21 22:17
日志写满了会自动删除最早存储的日志,但删除中间的还做不到。

ef_log_read 这个接口可以看下它的参数说 ...

您好,谢谢您的回复, 经过反复测试, 找到问题了, 是个低级错误, 我每次写日志的时候,程序调用了多次,我不小心把测试写日志的语句放在一个循环里面了。   您的库没有问题。

顺便在问一下,看到您在回复里面提到的“一般只是每个扇区头会有 LOG_SECTOR_HEADER_SIZE 长度存储扇区状态,所以略有差异。”,我想问一下我使用  ef_log_get_used_size()  获取所用空间的时候,是不包含 LOG_SECTOR_HEADER_SIZE  的吧?  就是不论我写了多少次日志(每次日志长度都是一致的)进去, 那么获取的值应该都是 日志长度*次数对吧。

还有个问题, 如果存储的日志太多, 已经导致了 日志循环覆盖, 那么这时候使用 ef_log_read(size_t index, uint32_t *log, size_t size) 函数读取的时候, 如果index的值是0,是不是永远读的都是 最早的一条日志?

出0入198汤圆

 楼主| 发表于 2018-3-22 21:54:00 | 显示全部楼层
huchunlei 发表于 2018-3-22 14:58
您好,谢谢您的回复, 经过反复测试, 找到问题了, 是个低级错误, 我每次写日志的时候,程序调用了多次 ...
  1. size_t ef_log_get_used_size(void) {
  2.     size_t header_total_num = 0, physical_size = 0;
  3.     /* must be call this function after initialize OK */
  4.     if (!init_ok) {
  5.         return 0;
  6.     }

  7.     if (log_start_addr < log_end_addr) {
  8.         physical_size = log_end_addr - log_start_addr;
  9.     } else {
  10.         physical_size = LOG_AREA_SIZE - (log_start_addr - log_end_addr);
  11.     }

  12.     header_total_num = physical_size / EF_ERASE_MIN_SIZE + 1;

  13.     return physical_size - header_total_num * LOG_SECTOR_HEADER_SIZE;
  14. }
复制代码


时间长了,刚才又仔细看了下代码,应该会减去每个扇区头部的 LOG_SECTOR_HEADER_SIZE 。

如果日志被追尾覆盖,那么 index 0 就是第二个 扇区的起始位置了。推荐使用 RT-Thread 的  shell 交互方式,自己写个命令,多测试下就会更清楚了。

如果,在项目中应用成功,也欢迎多多分享你的使用经验哈~

出0入0汤圆

发表于 2018-3-22 22:29:07 来自手机 | 显示全部楼层
我现在需要一种flash存储管理系统,具备掉电保护功能,长时间工作稳定性好,监控系统用,这个大致占用多少RAM。

出0入198汤圆

 楼主| 发表于 2018-3-22 22:58:50 | 显示全部楼层
fcmer2016 发表于 2018-3-22 22:29
我现在需要一种flash存储管理系统,具备掉电保护功能,长时间工作稳定性好,监控系统用,这个大致占用多少R ...

单纯只是日志存储功能,EasyFlash 几乎不占用 RAM 的

出0入0汤圆

发表于 2018-3-23 09:06:35 来自手机 | 显示全部楼层
sunnydragon 发表于 2018-3-22 22:58
单纯只是日志存储功能,EasyFlash 几乎不占用 RAM 的

我想具体咨询一下应用。企鹅号:酒吧司流吴儿。

出0入0汤圆

发表于 2018-5-18 15:44:20 | 显示全部楼层
楼主有没有即时联系方式,我想请教几个问题。

出0入0汤圆

发表于 2018-10-16 14:32:02 | 显示全部楼层
env demo里flash磨损平衡的原理是怎样的

出0入0汤圆

发表于 2018-10-17 11:00:43 | 显示全部楼层
支持楼主!!!!

出0入0汤圆

发表于 2018-10-17 12:18:02 | 显示全部楼层
好东西支持一下

出0入0汤圆

发表于 2018-10-18 16:20:44 | 显示全部楼层
很给力, 感谢您的开源分享

出0入0汤圆

发表于 2018-10-23 14:27:00 | 显示全部楼层
最近项目中调试一些偶发性问题很头疼,并且是运动器材,所以一直也想搞一个ERROR类日志存储flash的软件模块,今天就看到了。。。

出0入0汤圆

发表于 2018-12-14 17:14:55 | 显示全部楼层
收了,谢谢楼主!

出0入0汤圆

发表于 2018-12-15 06:42:33 来自手机 | 显示全部楼层
厉害厉害厉害厉害厉害

出0入0汤圆

发表于 2020-6-19 12:02:51 | 显示全部楼层
一直想看看关于flash管理相关的。给力。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-12-10 19:37

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

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