c - 无需RAM即可虚拟工作的解压算法(如果可能的话LZ喜欢)

标签 c assembly embedded compression

编辑:我尝试重新表述,以便尽我所能使其更清晰:)

我需要找到一种合适的方式/选择合适的压缩方式来在 ROM 中存储大量数据(例如大约 900KB),而可用空间量仅为 700KB 左右。如果我使用一些现代压缩工具(例如 WinZIP/WinRAR)压缩 blob,我可以轻松实现所需的压缩。

这里的问题是,解压将在非常非常非常有限的硬件上进行,我无法承受超过几个字节的可用RAM(比如不超过100字节,为了它)。

我已经尝试过对数据进行 RLE 处理...数据几乎无法压缩。

虽然我正在尝试更改数据 blob 格式,以便它可能具有更多冗余并实现更好的压缩比,但我同时也在寻找一种压缩方法,使我能够在有限的硬件上解压缩。我对压缩算法的了解有限,因此我正在寻求建议/指示以继续我的寻找。

谢谢!

最初的问题是“我需要有关解压算法的信息/指针,这些算法可以在不使用未压缩数据的情况下工作,因为解压后将不可用。LZ 之类的方法仍然是首选。”

最佳答案

恐怕这不是主题,因为太宽泛了。

LZW 使用相当大的状态,这与保留未压缩数据的切片没有太大区别。即使状态是恒定的并且从 ROM 读取,仅用寄存器处理它似乎也很困难。有很多不同的算法可以使用常量状态,但如果你真的没有 RAM,那么只能使用最基本的算法。

查找 RLE,行程编码。

编辑:好吧,没有滑动窗口,但如果你可以访问 ROM,100 字节的 RAM 会给你很多可能性。您想在汇编中实现这一点,因此请坚持使用非常简单的算法。 RLE 加上一本字典。根据您的要求,算法的选择应基于您需要解压缩的数据类型。

关于c - 无需RAM即可虚拟工作的解压算法(如果可能的话LZ喜欢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166658/

相关文章:

python - 在python或c中从/dev/video0读取摄像头输入

c - 如何使用chdir系统功能

c - OSx 键盘按 C

assembly - 为什么 GCC -O0 通常将第一个局部变量存储在 [ebp-4] 处,为什么不总是如此?

assembly - 如何使用汇编制作小型二进制文件?

embedded - 设计前向兼容通信协议(protocol)的指南?

c - C 中的 fork() 和 exit()

linux - 从汇编中的键盘读取整数(Linux IA-32 x86 gcc gas)

STM32驱动开发中的C编译错误

c++ - 德州仪器数字信号处理器 : interfacing C++ and assembly