原始Flash中的哈希表或嵌入式系统的简单文件系统

时间:2016-10-14 16:38:11

标签: database filesystems embedded hashtable cortex-m3

我正在开发一个手持式数据记录器。 CPU是STM32F10x,存储芯片是16MByte SPI-Flash。

闪存芯片的信息: 扇区大小:4096字节 编程页面大小:256字节

目前我使用的是简单的文件系统。我将获取的记录附加到二进制文件。数据不一定存储为文件。

记录的结构:

typedef struct strRecord{
    char Info[56];
    uint32_t TimeStamp;
    uint32_t SomeNumber;
....//Some other data
}Record;

记录的长度是固定的。在将记录附加到简单二进制文件之前,系统必须查询文件中是否存在具有相同Info(结构的第一个成员)的记录。如果存在这样的记录,则新记录将合并到该记录,否则将附加新记录。这些记录之间没有关系,它们是随机出现的。

目前我使用详尽的方法,从头到尾阅读并进行比较。此解决方案仅在文件包含数百条记录或更少时才有效。

问题是:随着文件大小的增加,查询过程将变得非常缓慢。系统应该有成千上万的记录。

我试图将较旧的sqlite版本移植到系统中,但我只有大约140K的Flash大小和48K的RAM备用。我只能将数据库修剪到大约200K并且尝试失败。

由于记录中有一个固定长度的字符串,也许一些Hash-Table风格的简单结构会拯救我。但是我知道的所有字符串哈希表算法实现都将哈希表存储在内存中。

任何人都可以给我一些如何在简单的文件系统或Raw Flash上​​实现哈希表的提示。

0 个答案:

没有答案