闪存搜索字符串

问题描述 投票:0回答:1

闪存用于记录帧:$D数据,$E错误和$R报告和更多。每一帧都有时间戳,在帧类型后面:$D,Timestamp......$E。所有数据均为十六进制,长度可变,即0=0,1587912486=5EA59F26,这不是固定长度的帧。时间戳为UDT1970。

NB:在Flash中,每页是256 Byte。

到目前为止,我从起始页和结束页之间的中心页开始,在该页上寻找(通过$D匹配)并读取时间戳(将flash字节逐个读取到数组中,直到检测到',')在每一页的开始。这是两个过程。跳页搜索,然后逐个字节搜索。

我很好奇,是否有类似的算法,在特定的名称下,或者有更好的算法优化Flash内存搜索。NB:我在SRAM的使用上有一个限制,即不能选择转移到大缓冲区。

c search flash-memory
1个回答
1
投票

在我看来,你开始运行的是一个 二进制搜索 直到找到包含键的区间,然后运行一个 线性搜索 在该区间内。

如果您的采样率是或多或少的恒定值,您可能会更快地用以下方法在正确的区间内归零 内插搜索但它对你的插值的准确性非常敏感,这将取决于你的采样的均匀性。

快速搜索(和精确插值)最明显的障碍是可变的帧大小:如果你能在不浪费太多空间的情况下固定大小,或者写一个单独的索引(本身就有固定大小的记录,不管是小的适合SRAM,还是也住在flash里),应该会比较容易。

例如,你可以保留一个可快速查找的索引,存储时间戳+索引(只是一个数组,再进行二进制或插值查找,或树或跳过列表,或其他)。然后你就可以用固定的偏移量进行快速查找,并对可变大小的数据进行内推。

© www.soinside.com 2019 - 2024. All rights reserved.