【问题标题】:Zlib compression on MSP430MSP430 上的 Zlib 压缩
【发布时间】:2012-01-13 20:39:36
【问题描述】:

有没有人尝试在 MSP430 上使用 zlib 压缩?您对如何编译为库以用于 MSP430 项目(我使用的是 IAR Embedded Workbench)有什么建议吗?

【问题讨论】:

标签: embedded compression zlib msp430


【解决方案1】:

根据MSP430 datasheetsWikipedia article,即使只是滑动窗口 (32 KiB),您也没有足够的 RAM(最多 16 KiB)。因此,您不能对 MSP430 使用任何放气算法。考虑到 ZLIB 是一个简单的放气实现,对于 ZLIB 也是如此。即使您尝试编写自己的 deflate 实现,您也无法成功。因为,deflate 需要 32 KiB 用于滑动字典和一些额外的内存用于它的霍夫曼树。这仅适用于减压部分。对于压缩,您需要额外的内存用于哈希链匹配查找器,即 7.5 * 字典大小 = 240 KiB(根据 7zip 的 deflate 实现)。如果您真的需要为那个小型架构进行压缩,我建议您查看自定义字节编码 LZSS 压缩算法。它们速度快、重量轻。但是,由于熵编码差异特别大,不足以与 deflate 竞争。

【讨论】:

  • 很好理解,节省了我一些实验时间。
  • 请记住,大多数压缩算法都需要大量资源。其中一些在 CPU 功率与内存之间进行了权衡(即,有些使用大量内存和少量 CPU 功率,反之亦然)。您甚至可以找到一些使用高达 13 GiB 内存的算法。 Here 是参考基准,列出了流行压缩器的处理时间和内存使用情况。
  • 对,我知道,这是一个不知道它想要多少的情况,我的方法是实验而不是研究。感谢您提供非常有用的链接。
【解决方案2】:

我曾经构建 zlib 作为处理器开发的测试,但随着世界开始过渡到 64 位,他们随意使用 unsigned long 和 unsigned int 以及在没有仔细类型转换的情况下进行混合等会对编译器造成严重破坏。它现在可能已经安定下来,但我不再使用它了。

它确实需要/想要大量内存,与某些竞争对手相比,msp430 在内存方面特别小。

我有一个 msp430 模拟器,您可以使用 http://github.com/dwelch67/msp430sim。这很容易配置成有很多内存,比你在芯片中找到的要多。 Althogh zlib 可能仍然想要完整的 64k 并且不会留下任何东西。只需要看看会发生什么。也许我会接受这个并自己尝试作为我的模拟器的测试。在上面的模拟器或我的其他模拟器中,我使用了一个不同的压缩工具,它的内存占用非常(相对)小。不确定您是否特别需要 zlib,或者您是否只需要一般的某种解压缩。

【讨论】:

    【解决方案3】:

    我已经为多个目标构建了它,而不是专门针对 MSP430,但这应该无关紧要。它都是 ISO C 并且仅依赖于标准库调用。它使用动态内存分配,因此您需要一个堆。

    【讨论】:

    • 感谢您的回答。我能够使用 deflate 算法为 msp430 构建一个小型测试程序,但运行了我们的堆栈空间。我假设这与您提到的堆有关。你能详细说明一下吗?
    • 堆栈要求是一个不同的问题。通常,您将在 C 运行时启动的某个地方分配一定数量的堆栈。如果您正在使用任何类型的 IDE 和项目配置工具,那么这很可能是一个选项。在某些情况下,项目将在堆栈和静态分配后将所有剩余内存分配给堆,在其他情况下,您可能必须显式指定堆大小。无论哪种方式,我关于拥有一个堆的观点仅仅是你需要一个。 zlib 在您的目标上的成功将取决于总体上有足够的内存并支持动态内存分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多