YH_505 发表于 2023-12-30 10:57:10

抛砖引玉,实测可用的STM32压缩算法miniLZO, keil工程



压缩 1024 bytes into 519 bytes, time = 363 us
解压 519 bytes back into 1024 bytes, time = 159 us

可用工程不记得是从哪里下载的了, 版权归作者所有:

疑问:大神移植,仅修改了一个宏定义, 不知何意,修改为官网代码,内存分配出错

官网代码是:
#define D_BITS          14

STM32移植代码:
#define D_BITS          11









lb0857 发表于 2023-12-30 14:28:15

minilzo编译后的库有多大?

配合使用另外一款软件
去比较一下数据是不是真的一致:
数据比较的工具“Beyond Compare”

honami520 发表于 2023-12-30 14:38:54

5年前我就编译过这个,在stm32f4上面做的,有时候压缩效果很惊人,速度也挺快,内存的话肯定是越大越好。
不过这玩意压缩的东西,无法在电脑上面直接解压缩,后来就没用了。
而且,这个算法如果去和服务器通信,那些做java的,也无法使用

dukelec 发表于 2023-12-30 15:16:02

本帖最后由 dukelec 于 2023-12-30 15:24 编辑

建议试试 lz4,也是实时压缩算法,我从 linux 内核里面 copy 出来的代码,解压只有 160 行代码,压缩有 500 行代码

https://github.com/dukelec/cdcam/tree/master/cam_fw/usr/lz4

这个算法验证过,和 linux 命令行的压缩命令 lz4 是一致的,可以相互压缩和解压

https://github.com/dukelec/cdcam/tree/master/cam_fw/usr/pga_fw

我是在 pga_fw 目录下,先用 lz4 命令,把一个 70K 的 bin 文件按 24K 拆分成多个文件,用 linux lz4 命令压缩后转成 c 语言数组

然后 stm32 上电的时候,用 lz4 c 程序依次把压缩后的数据解压,然后通过 spi 传输出去(写固件到 fpga 的 ram)

压缩后,70K 的固件不到 10K,大幅节省 stm32 的 flash 占用,否则还要外挂一个 flash 芯片存 fpga 固件

之所以要按照 24K 拆分,是因为不拆分的话,stm32 没那么大的 ram 存放解压后的数据,我又不想用流式解压、把简单事情复杂化

waymcu 发表于 2023-12-30 22:14:21

这是好东西

radar_12345 发表于 2024-1-13 13:51:39

dukelec 发表于 2023-12-30 15:16
建议试试 lz4,也是实时压缩算法,我从 linux 内核里面 copy 出来的代码,解压只有 160 行代码,压缩有 500 ...
(引用自4楼)

用链接里的代码(共4个文件),在winGW下编译,压缩前二进制文件大小:49296 byte,压缩后大小:41984 byte,压缩率不是很高啊,是改 lz4defs.h 文件哪个宏定义可以提高压缩率吗?

dukelec 发表于 2024-1-13 17:36:50

radar_12345 发表于 2024-1-13 13:51
用链接里的代码(共4个文件),在winGW下编译,压缩前二进制文件大小:49296 byte,压缩后大小:41984 by ...
(引用自6楼)

压缩率和文件内容有很大关系,文件里面重复的内容少,就压缩不了多少

先用 lz4 命令压缩看一下压缩比到多少

eipai10 发表于 2024-1-13 17:50:21

dukelec 发表于 2023-12-30 15:16
建议试试 lz4,也是实时压缩算法,我从 linux 内核里面 copy 出来的代码,解压只有 160 行代码,压缩有 500 ...
(引用自4楼)

好东西,试试
页: [1]
查看完整版本: 抛砖引玉,实测可用的STM32压缩算法miniLZO, keil工程