硬汉嵌入式论坛

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

[有问必答] 关于使用内置flash的单sector的flashdb开源算法

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-7-20 17:16:13 | 显示全部楼层 |阅读模式
背景
当前MCU(STM32F407)内置FLASH空间划分为三块
1. 128K loader
2. 768K app
3. 128K db
最后128K的db部分只使用了一个sector,使用两个sector的话太大没必要,而且APP预计会超过512K的。

需求
想找一个类似flashDB的算法,可以实现小型的kv数据库。
flashDB根据我之前的了解是需要至少两个sector来做磨损均衡之类的处理的。

我的想法是我所有写入的kv对总大小有一个上限,比如说1k或者2k,MCU内部会保留对应大小的cache
然后往这sector里面写(类似flashdb的写入逻辑,减少对sector的擦除)
如果sector写满就把sector擦除,然后把所有的kv重新写入

请问是否有类似的算法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2023-7-21 09:24:27 | 显示全部楼层
除了找个新的实现方法。

将这个KV区安排在靠前的扇区,那些扇区小,可以分配多个扇区出来。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2023-7-21 12:08:19 | 显示全部楼层
eric2013 发表于 2023-7-21 09:24
除了找个新的实现方法。

将这个KV区安排在靠前的扇区,那些扇区小,可以分配多个扇区出来。

今天上午想到一个办法,刚才试了一下,没啥问题。

把loader的链接文件改了一下,
第一个sector留给loader,第二三个sector留给kv,第四五个sector还是给loader
这样的话keil编译的时候会生成两个bin文件,分别从第一个sector起始地址烧录和第四个sector起始地址烧录(keil自己的下载会自动分开下载)
这样就把第二三个sector空出来。

我这里碰到一个问题就是我用的RT-Thread,需要把rti_fn那个段放在一起,不能让链接器分散到两个flash区域里面。

下载.png

下载 (1).png



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 03:02 , Processed in 0.169833 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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