之前完成了串口升级到功能之后,觉得700多K一分多钟的传输时间应该还有优化空间。波特率最大就115200bps,而且有些特殊时候还要降到19200用,所以减少程序大小是个途径。一般要显著减少代码量比较困难,除非程序里面“废话”太多;而且做编译器优化实验观察,差异还不到10%。压缩自然是个好方法,某次打rar包仔细看了下,500多K的程序压到不到200k,看来效果比较明显。于是有了以下想法:
一。找一个公开的压缩算法,最好有良好的C接口
二。测试该算法的压缩性能,压缩比大概跟Winrar差不多,不多于1倍就好
三。移植解压部分到目标板程序,实现[上位机压缩程序]->[串口传输]->[目标板解压升级程序]的串口升级流程
首先是找一个公开的压缩算法:
LZW
http://zh.wikipedia.org/zh/LZW
LZMA
http://zh.wikipedia.org/wiki/LZMA
.....
然后不停地搜源码下源码,下了一堆。浏览了一下”战利品“,最后发现有个LZMA SDK的C实现比较合我胃口。用vs写了个console工程,就调用LzmaLib里面的LzmaCompress和LzmaUncompress接口,参数全部默认,实现了一个简单的命令行压缩工具。
这里小结下Lzma SDK的使用:
最顶层的接口是LzmaCompress和LzmaUncompress,位于LzmaLib.c中,声明如下:
//--------------------------------------------//
MY_STDAPI LzmaCom