我打算对通过慢速串行接口传输的数据流使用压缩。解压缩应该在资源有限的低成本微控制器上进行(没有操作系统,没有线程,有限的内存)。
在之前的类似配置中,我使用了zlib的puff.c,但在这种情况下,a有一个缓冲区存储之前的所有数据,并且可以一次性全部膨胀。
在我的实际情况中,我没有足够的内存用于那种缓冲区,所以我需要逐步扩充数据。因此,每次新数据到达时,我都需要能够调用它,而不是让puff工作在缓冲区上,在后续调用之间保持内部状态。
在我开始深入研究zlib或zlibs puff.c之前,是否有人知道这些问题是否已在某处解决过?
我用过LZSS。我用code的Haruhiko Okumura作为基础。它使用未压缩数据的最后部分(2K)作为字典。如果您在内存中拥有所有未压缩的数据,则可以修改我链接的代码以使用几乎没有内存。通过谷歌搜索,你会发现很多不同的实现与各种许可证。
另一个选择可能是实现LZF的lzfx lib。我还没用过,但看起来不错。还使用以前的结果,因此它具有较低的内存要求,并在BSD许可下发布。
感谢您的所有意见和建议。
调查后我会坚持使用puff.c并修改它或者我将使用我在这里找到的uzlib:https://github.com/pfalcon/uzlib/