硬汉嵌入式论坛

 找回密码
 立即注册
查看: 968|回复: 9
收起左侧

[技术讨论] flash管理万条上报数据方案

[复制链接]

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2023-2-27 11:39:34 | 显示全部楼层 |阅读模式
各位大佬,现在使用单片机STM32F103 64管脚+W25Q64开发的项目,使用W25Q64存放数据,目前需要将MCU采集的数据首先打包上报给服务器,服务器接收成功不进行存储,服务器接收不成功需要进行存储管理。主循环中一定时间内检测将未上报成功的数据进行再次发送。发送成功则清除数据。每包数据大概8byte,最大存储约50000条。


目前想到的方案是在一定时间内循环检测是否有数据发送,有则进行上报,上报成功则清除。不成功则进入下一次检测。主要目前有存储50000条,使用for循环一直检测的话浪费时间,效率不高。
如果按照顺序依次进行存储(FIFO方式),需考虑如下问题:当Flash中需要存储的数据有10包时,在发送前3包数据时成功,后面7包数据也有可能发送失败。

不知道各位大佬是否有其他更好的管理方案。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2023-2-27 15:28:01 | 显示全部楼层
有个关键的地方没有搞明白,这50000条是一次性采集完毕吗,还是边采集边上传,上传失败了存储。

存储的这个还需要后面继续上传不
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-2-27 16:10:52 | 显示全部楼层
本帖最后由 caicaptain2 于 2023-2-27 16:12 编辑

每个包的数据增加一个成员变量,指示当前的数据是否已经上传。 上传成功后不用真实删除,只是更改标记。 把flash的空间全分配给数据记录,只是初始的时候,每个都标记已上传。 这样,每个数据都有固定的地址,方便操作,而且很容易顺着写,有利于flash平衡擦除。

回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2023-2-27 18:55:31 | 显示全部楼层
如果固定长度好办啊,flash有个特性可以用上,同一个字节可以写多次的,用来做标志位,或者直接移植flashdb
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2023-3-2 16:49:23 | 显示全部楼层
cctv180 发表于 2023-2-27 18:55
如果固定长度好办啊,flash有个特性可以用上,同一个字节可以写多次的,用来做标志位,或者直接移植flashdb

好的,非常感谢,我来看下flashdb移植
回复

使用道具 举报

19

主题

235

回帖

292

积分

高级会员

积分
292
发表于 2023-3-2 17:39:22 | 显示全部楼层
自己做过一个用NorFlash记录日志的,没有查找功能,安全性没有很大,没有处理写入途中突然掉电或者MCU复位的情况
但每条写入时间最少可以达到三四毫秒, 最高只有四十毫秒,也五就是一个扇区擦除的时间,大概每隔十几二十条会出现一次四五十毫秒的峰值,其余时候都是几毫秒到十来毫秒之间,这是一个周期性的
对我自己的需求来说只要能记录就行了,重要的是写入时间尽可能短。我自己不需要查找功能,但做了一个按新到旧的读的接口
如果需要可以分享出来
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-3-3 08:56:11 | 显示全部楼层
我做過類似的應用, 也可以參考下面這個庫.
https://github.com/cloudyourcar/ringfs
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2023-3-3 13:47:48 | 显示全部楼层
eric2013 发表于 2023-2-27 15:28
有个关键的地方没有搞明白,这50000条是一次性采集完毕吗,还是边采集边上传,上传失败了存储。

存储的 ...

50000条数据,是在上传失败后存储的。存储的数据后面还是要上传的
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2023-3-3 13:49:06 | 显示全部楼层
sukon 发表于 2023-3-3 08:56
我做過類似的應用, 也可以參考下面這個庫.
https://github.com/cloudyourcar/ringfs

好的,非常感谢
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
发表于 2023-3-3 15:31:20 | 显示全部楼层
数据频率快的话最好不要判断,数据积压处理不过来的,上报服务器的时间有时候很长,但是数据产生速度通常很快。
之前做GPS数据通过4G发送时也是类似的情况,全部数据直接存,存储一个数据的时间是很短的,通过一个读写指针的ringbuffer结构来管理数据。
另一个任务根据是否有数据需要发送,未发送数据多少来对数据进行打包发送,成功则更新读指针位置。
存数据时更新写指针,写指针移动到扇区边界时,擦除下一个扇区,如果读指针在扇区内,舍弃扇区内的数据,移动到下一个扇区。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 21:13 , Processed in 0.175119 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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