| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * Copyright (c) 2024, sulfurandcu.github.io
- *
- * SPDX-License-Identifier: MIT
- *
- * Change Logs:
- * Date Author Notes
- * 2024-10-24 liujitong first version
- * 2025-09-30 wdfk_prog add decompresser config
- */
- #ifndef __hpatch_conf_h__
- #define __hpatch_conf_h__
- #include "rtthread.h"
- #ifdef PKG_HPATCHLITE_DECOMPRESSER_TUZ
- /* 启用tuz解压功能 */
- #define _CompressPlugin_tuz 1
- /*
- * 0 (默认): Tinyuz 将使用自己独立的一套类型定义,如 tuz_byte, tuz_BOOL, _tuz_TInputCache 等。
- * 1: Tinyuz 将会直接使用 HPatchLite 的类型定义,例如 tuz_byte 会被 #define 成 hpi_byte,_tuz_TInputCache 会被 #define 成 _hpi_TInputCache。
- * 当 Tinyuz 和 HPatchLite 在同一个项目中紧密集成时,将此宏设为 1 可以减少代码体积。因为两种输入缓存结构体 (_TInputCache) 的实现可以被复用,从而节省几十到上百字节的Flash空间。
- */
- #define _IS_USED_SHARE_hpatch_lite_types 1
- /*
- * 作用: 控制 Tinyuz 是否启用一种特殊的**“原文数据块(Literal Line)”**处理模式。
- * 1 (默认,用于解压): 启用该模式。解压器能够处理一种特殊的指令,该指令表示“接下来的一段数据是未压缩的原文,请直接复制”。这对于处理那些本身就难以压缩的数据(如已压缩的图片、加密数据)非常有效,可以避免压缩算法在这些数据上“白费力气”,甚至防止压缩后体积变大的情况。
- * 0: 禁用该模式。解压器将不认识“原文数据块”指令。
- * 重要联动: 压缩端和解压端的这个宏设置必须完全一致!
- * 如果您在PC端使用 hdiffi.exe -c-tuz ... 来打包,那么您在MCU端的 tuz_isNeedLiteralLine 必须是 1。
- * 如果您在PC端使用 hdiffi.exe -c-tuzi ... (注意后面的 i) 来打包,那么您在MCU端的 tuz_isNeedLiteralLine 必须是 0。
- * 设置为 0 可以减少解压端的代码体积(节省大约54字节),但代价是可能降低对混合数据的压缩率。
- */
- // #define tuz_isNeedLiteralLine 0
- /* 禁用tuz断言 */
- // #define NDEBUG
- /*
- * 作用: 控制是否在代码中加入运行时的内存安全检查。
- * 1 (默认): 启用检查。代码中会包含一些 assert 或类似的检查,用于在解压过程中判断是否存在缓冲区溢出、数据损坏等风险。这会使代码更健壮,但会稍微增加一点代码体积和运行开销。
- * 0: 禁用检查。移除所有的安全断言。可以获得极致的代码大小和性能,但牺牲了运行时的安全性。通常只在经过充分测试、准备发布最终产品时才考虑关闭它。
- */
- // #define _IS_RUN_MEM_SAFE_CHECK 1
- /*
- * tuz_kMaxOfDictSize 和 tuz_kDictSizeSavedBytes
- * tuz_kMaxOfDictSize:
- * 作用: 定义了 Tinyuz 算法理论上支持的最大字典大小。它不是您实际使用的字典大小,而是一个编译时的上限。
- * 这个值会影响 tuz_kDictSizeSavedBytes 的计算。
- *
- * tuz_kDictSizeSavedBytes:
- * 作用: 这个宏非常重要。它决定了在压缩数据流的开头,用多少个字节来存储实际的字典大小值。
- * 计算逻辑: 它是根据 tuz_kMaxOfDictSize 的大小自动计算的。
- * 如果 tuz_kMaxOfDictSize 在 2^8-1 (255) 以内,就用1个字节存储。
- * 如果在 2^16-1 (65535) 以内,就用2个字节存储。
- * ... 以此类推。
- * 目的: 这是一种空间优化。如果知道一个系统永远不会使用超过64KB的字典,就可以通过 tuz_kMaxOfDictSize 限制它,从而使存储字典大小的头部字段更小。
- */
- // #define tuz_kMaxOfDictSize (1<<30)
- /*
- * 作用: 这个宏定义了 Tinyuz 算法所能接受的最小字典大小(Minimum Dictionary Size)。
- * 默认值: 1。
- * 目的:
- * 参数校验: 它主要用于参数合法性检查。当 hdiffi (压缩端) 或 tuz_dec (解压端) 接收到一个字典大小参数时,会检查这个值是否大于或等于 tuz_kMinOfDictSize。如果用户试图提供一个为0或无效的字典大小,这个检查可以防止程序出错。
- * 算法下限: 它从理论上确立了算法可以工作的最小资源条件。虽然使用只有1个字节的字典几乎没有任何压缩效果,但算法本身在这种极端情况下依然是正确和有效的 */
- // #define tuz_kMinOfDictSize 1
- #endif
- // Future decompressors can be added here
- // #ifdef PKG_HPATCHLITE_DECOMPRESSER_ZLIB
- // # define _CompressPlugin_zlib 1
- // #endif
- #define hpi_malloc(x) rt_malloc(x)
- #define hpi_free(x) rt_free(x)
- #endif /* __hpatch_conf_h__ */
|