我们目前正在为客户创建一个设备,它将从PC应用程序中获取一块数据(例如,5-10KB).这有点简化,因此假设数据必须经过多次传递和解压缩,而不是每年一次.通信通道非常非常慢,因此我们希望事先压缩数据,传递给设备并让数据解压缩到内部闪存.然而,设备本身在微控制器上运行,该控制器不是很快并且没有大量内存.它有足够的闪存来存储结果,并且可以在接收时解压缩数据块,但它可能没有足够的RAM来存储整个压缩或未压缩(甚至两个!)数据块.当然,它没有操作系统或其他奢侈品.
这意味着我们需要一个足够快速的无压缩算法,它不会占用大量内存.压缩可能是缓慢而丑陋的,因为我们在PC端进行压缩.C或.NET代码首选,但压缩,以使事情更容易.解压缩代码应该在C中,因为某人不太可能为我们的控制器提供ASM优化版本.
我们发现LZO对我们来说几乎是完美的,但它默认有一个所谓的"免费"许可证(GPL),这使得它对我们的客户来说完全无法使用.作者说,商业许可证可以根据要求提供,但不幸的是他目前无法访问(出于非技术原因,如他网站上的新闻所说).
我找到了一些其他的库,包括zlib的puff.c,我们还在调查,但我想我会问你的经验:
鉴于解压缩设备的资源非常有限,需要源代码和商业许可证,您建议将哪种压缩算法和/或库用于嵌入式目的?
任何人都可以指出如何在低内存条件下(<2k)实现lzw压缩/解压缩.那可能吗?