在嵌入式设备上膨胀(解压缩)数据流

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

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

在之前的类似配置中,我使用了zlib的puff.c,但在这种情况下,a有一个缓冲区存储之前的所有数据,并且可以一次性全部膨胀。

在我的实际情况中,我没有足够的内存用于那种缓冲区,所以我需要逐步扩充数据。因此,每次新数据到达时,我都需要能够调用它,而不是让puff工作在缓冲区上,在后续调用之间保持内部状态。

在我开始深入研究zlib或zlibs puff.c之前,是否有人知道这些问题是否已在某处解决过?

c embedded inflate
3个回答
0
投票

.GIF文件格式压缩算法(LZW,LZ78的变体)几乎只需要在内存中维护哈希表。当表格填满时,它会被清空,并且该过程会重复,这意味着表格不会无限增长。也没有必要保留压缩数据。其他国家的需求很少。使用这样的算法(可能具有减少的哈希表大小),您可以在数据进入时对其进行解压缩。

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


0
投票

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

另一个选择可能是实现LZF的lzfx lib。我还没用过,但看起来不错。还使用以前的结果,因此它具有较低的内存要求,并在BSD许可下发布。


0
投票

感谢您的所有意见和建议。

调查后我会坚持使用puff.c并修改它或者我将使用我在这里找到的uzlib:https://github.com/pfalcon/uzlib/

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