我在 PC 上有一个 12288 字节的缓冲区,该缓冲区已使用 C# DeflateStream 类进行了压缩,因此生成了一个原始的压缩数据缓冲区。
我通过串行 COM 将压缩数据发送到 ESP32。要解压缩,我想在一个函数中使用这段代码来使用 rom/miniz:
tinfl_decompressor inflator;
tinfl_init(&inflator);
tinfl_status status = tinfl_decompress(&inflator, panel2, &inBufferSize, pBuffer, pBuffer, &outBufferSize, 0);
if (status != TINFL_STATUS_DONE) return false;
pBuffer 指向一个用 malloc 成功分配的 12288+100 字节的缓冲区。
当我运行该程序时,ESP32 在 tinfl_decompress 处重新启动(如果我用状态注释 2 行则不会崩溃)。
- 我检查了传输,缓冲区是正确的。
- 我已经尝试使用 TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF 作为标志(因为目标缓冲区应该足以容纳整个未压缩的数据)
但它仍然崩溃。
我做错了什么?在上面的代码之前,miniz 是否有任何进一步的初始化要执行?