为方便技术交流探讨,特建一个QQ群:47954837 ,欢迎加入!
目前新开发出的RLE_X3差分还原算法,已经能够支持最小1K的内存空间,目前有MDK默认编译器的ARM系列的库,欢迎进群索取。
原文地址:https://blog.csdn.net/duzhi2004/article/details/103560574
注:该算法在STM32F031等芯片上移植成功,总内存需求约合计16KB(压缩率相关),感兴趣的朋友可以一起进行技术交流,添加博客同名weixin号即可。
工具已上传:https://download.csdn.net/download/duzhi2004/12530145
前言:
近些年来随着通信技术的进步,物联网的已成为一个趋势,而在众多的联网应用需求中,超过95%以上是在窄带物联网上的,比如传统的GPRS方式、及目前流行的NBIOT技术,
窄带的应用的设备大多资源也是受限的,计算能力偏弱,程序运行、存储空间较小,但是随着应用端业务的变化,这些设备的相应软件程序需要做更新,也就是通常所说的OTA,其与网络传输(窄带)之间是矛盾的,所以在此类型的应用中,差分包OTA的需求是很明显的,其能够显著减少OTA的包大小,加快升级速度,减少能耗,节约通信资费。
本应用采用开源算法BSDIFF实现数据的差分化,考虑到应用场景的内存受限情况,文件压缩改用LZ77算法,尽可能减少对内存的占用;算法在VS2008上进行了测试验证无误,测试的输入样本文件选用了两个相似的程序版本,A.bin ,B.bin,大小约92.9KB,生成的差分文件diff.bin 约1.03KB。
内存受限内存系统大多无文件系统的支持,所以本次改动,特增加了类似文件读文件流的方式读取flash的数据,通过升级工具把差分文件下载到flash中,再lz_fopen_ex进行文件的打开,信息校验,lz_fread_ex函数用来内存中解压文件,把bsdiff中描述的,ctrl、diffstring、extrastring 进行文件的还原操作,内存的占用具体的开发根据自己的芯片决定,一般总的内存占用在4K以内, 当然在升级的应用中还有些需要注意的地方,比如新旧文件的特征码比对等等校验,防止在升级过程中产生升错文件的情形。
写这篇文章的目的是告诉大家这种方式的可行性,另外也是做一下记录,因为源代码有商业应用的可能,不太方便进行开源,仅供参考使用。
以下是部分解压过程,例子是在VS中运行的,所有以几块内存来模拟几个文件的存在。