【发布时间】:2022-01-07 07:36:17
【问题描述】:
我正在开发带有 5kb 可用闪存的嵌入式设备 (STM32)。我正在尝试使用 zlib 库压缩 string。
我创建了函数HERE,它返回-2 (Z_STREAM_ERROR)。
我做了什么:
- 在
zconf.h上,我将MAX_MEM_LEVEL的值更改为1,将MAX_WBITS更改为5,以降低内存使用率。但我仍然返回-2(Z_STREAM_ERROR)。
然后我在deflate.c 上找到了这个,我不能低于MAX_WBITS 低于8:
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
然后我将它设置为 MAX_MEM_LEVEL 到 1 和 MAX_WBITS 到 8 但是当我尝试编译时它总是返回 region FLASH overflowed by 15960 bytes。看来我的内存用完了。
然后我又试了一个例子:
- 跟随zpipe.c 示例,定义
CHUNK到1024。
结果还是一样,region FLASH overflowed by 15960 bytes。
有没有其他方法可以仅使用 FLASH 内存 5kb left?
注意:
- RAM 也是
5kb左侧。
【问题讨论】:
-
当您说“剩余
-
@Someprogrammerdude 它是闪存。对不起,我会编辑问题。
-
@Someprogrammerdude 所以它是
5kb在编译 zlib 函数和库之后。但是当我将MAX_MEM_LEVEL设置为5并将MAX_WBITS设置为8时,FLASH overflowed失败了(当我将两者都设置为1时,它使用剩余的5kb 可用内存成功编译)但它总是返回-2(Z_STREAM_ERROR) 上面已经解释过了。 -
您尝试更改的值会影响压缩算法及其 RAM 的使用,而不是库的静态代码大小。
-
@Clifford 是的,这就是我的观点,因为该技术信息页面之前指出放气可以使用 3K 内存完成。我现在已更正该页面以添加 6K 的恒定开销。