在嵌入式设备上充气(解压缩)数据流

时间:2019-04-06 22:19:34

标签: c embedded inflate

我打算对通过慢速串行接口传输的数据流使用压缩。 解压缩应该在资源有限(无操作系统,无线程,内存有限)的低成本微控制器上进行。

在以前的类似配置中,我使用了zlib的puff.c,但在那种情况下,它有一个缓冲区来存储之前的所有数据,并且可以一次将所有数据进行充气。

在我的实际情况下,我没有足够的内存来容纳此类缓冲区,因此我需要逐步增加即将到来的数据。 因此,除了在缓冲区上工作之外,我还需要在每次新数据到达时都调用它,并保持后续调用之间的内部状态。

在我开始深入研究zlib或zlibs puff.c之前,有人知道这种问题是否已经在某个地方解决了吗?

3 个答案:

答案 0 :(得分:0)

.GIF文件格式压缩算法(LZW,LZ78的一种变体)几乎只需要在内存中维护一个哈希表。表格填满后,将其清空,然后重复该过程,这意味着表格不会无限期地增长。也无需保留压缩数据。其他状态很少需要维护。使用这样的算法(可能减小哈希表的大小),您可以对数据进行解压缩。

我没有研究其他LZ算法,但我希望(某些或全部?)它们本质上相似。

答案 1 :(得分:0)

我用过LZSS。我使用了code中的Haruhiko Okumura作为基础。它使用未压缩数据(2K)的最后一部分作为字典。如果您在内存中拥有所有可用的未压缩数据,则可以将我链接的代码修改为几乎不使用任何内存。通过一点点Google搜索,您会发现使用各种许可证的许多不同实现。

另一个选项可以是实现LZF的lzfx库。我还没有用过,但是看起来不错。还使用以前的结果,因此对内存的要求较低,并根据BSD许可证发布。

答案 2 :(得分:0)

感谢您的所有评论和建议。

经过调查,我将坚持使用puff.c并对其进行修改 否则我将使用在这里找到的uzlib: https://github.com/pfalcon/uzlib/