【问题标题】:Zip stream implementation with C in embedded devices在嵌入式设备中使用 C 实现 Zip 流
【发布时间】:2013-05-13 19:46:27
【问题描述】:

我必须在 MCU 内部存储器的有限空间中嵌入一个大文本文件。此 MCU 稍后会将文本文件的内容用于某些目的。
内存限制不允许我将文件内容直接嵌入到我的代码中(假设我使用字符数组来存储文件内容),但是如果我压缩文件的内容(使用像 zip 或 gzip 这样的轻量级算法)那么一切都会好起来的。
假设 MCU 使用getBytes(i, len) 函数读取我的数组的内容(其中i 是所需字节开头的索引,len 是要读取的数据长度), 这里的问题是,当我压缩内容并将其存储在设备上(在我的字符数组中)时,我不能再使用getBytes 函数来获取目标数据,所以如果我可以在@987654325 之上编写一个包装器@函数将压缩内容映射到请求的内容,然后我的问题就解决了。
我对 MCU 没有处理限制,内存量也受到限制,并且我知道对 zip 压缩文件内容的访问是顺序的,所以我不知道是否可以使用可接受的方式执行此操作在这种环境下是 C 还是 C++?

【问题讨论】:

  • 压缩后的数据如何到达MCU?流媒体?还是本地存储?如果是本地存储,压缩窗口有多大可能并不重要,因为您可以随时返回并重新读取您需要的任何内容(闪存在随机访问时相对较快)。但如果是流式传输,那么您无法在 ram 中保留一小部分以供访问,因此需要将窗口限制在此范围内。

标签: stream embedded zip microcontroller gzipstream


【解决方案1】:

绝对有可能以简单有效的方式做到这一点。

但是,最好使用分段压缩(以压缩比为代价)而不是一次压缩/解压缩整个文件,否则您需要将整个解压缩文件存储在 RAM 中。

使用小块,强算法的压缩率与相对弱的算法不会有太大差异。所以我推荐使用简单的压缩算法。

磁盘压缩算法最适合用于压缩/解压缩块的目的。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多