桃子网站,企业网站psd模板,孝感市建设网站,网络舆情监控摘要
提出一种改进HDiffPatch算法并在复旦微单片机上实现小内存差分升级的方案#xff0c;即使用单片机内的Flash空间替代算法占用的RAM空间#xff0c;从而减少算法对单片机RAM空间的需求#xff0c;以满足小内存微处理器的差分升级#xff0c;同时对算法内存分配释放函数…摘要
提出一种改进HDiffPatch算法并在复旦微单片机上实现小内存差分升级的方案即使用单片机内的Flash空间替代算法占用的RAM空间从而减少算法对单片机RAM空间的需求以满足小内存微处理器的差分升级同时对算法内存分配释放函数进行优化以最大限度地利用RAM空间。
引言
差分升级也称增量升级或补丁升级其升级的原理很简单首先通过某种算法找出新软件版本和旧软件版本不同的地方这个过程称为差分然后把不同地方抽取出来构成所谓的更新补丁patch也称差分包difference package之后在旧软件版本的基础上通过还原算法将差异部分还原出来从而升级为新版本程序。
与整包升级最大的区别在于差分升级是通过一个差分文件对系统进行升级其差分文件比新版程序文件更小所以差分升级带来了许多方便
大大缩减了传输数据的大小提高了软件升级的成功率。对于窄带物联网、4G网络等设备远程升级还可以节省下载流程。对于电池供电设备远程升级缩短了升级时间降低了升级过程中的功耗。软件升级的数据通过传输新旧程序差异数据而非完整程序数据增强了软件升级的安全性。
当前应用到的差分升级方法只适用于大内存微处理器对于小内存微处理器无法实现差分升级因为还原算法需要较大的内存。
系统差分升级算法方案概述
差分升级方案的核心就是使用差异文件diff和补丁文件patch算法来对新旧程序文件进行diff/patch操作。BsDiff/BsPatch与xdelta是当前使用较多的两种算法但有一种比前两者更加高效的开源算法应用得越来越多即HDiffPatch算法。
同等条件下对比测试HDiffPatch与BsDiff4.3、xdelta3.1两种算法生成的diff数据文件大小、运行时间、占用内存。
HDiffPatch开源算法GitHub提供的测试对比结果表明HDiff比BsDiff生成的diff数据文件小15%以上运行时间更短约其1/4占用内存更小约其2/3在资源紧张且受限的设备中进行patch时HPatch比BsPatch运行得更快在整个patch阶段HPatch最慢时比BsPatch快约1倍运行最快时约5倍内存占用更小约为BsPatch的1/2。
HDiff比xdelta生成的diff数据文件小25%以上运行时间几乎相同内存占用小于其1/5进行patch时HPatch运行时间比xdelta大约慢50%内存占用小于其1/5。
对于嵌入式设备内存资源有限在不影响性能的情况下降低内存消耗比速度更加重要因此本系统采用开源HDiffPatch算法实现程序的差分升级。
系统总体设计框图 系统差分升级流程主要有3步首先是差分包的产生其次是差分包的传输最后是新程序的还原。
本系统差分包通过具有HDiffPatch算法的上位机生成。当系统需要进行差分升级时将差分包通过红外、窄带物联网、有线网口、4G网络、有线串口或其它无线通信方式传输至嵌入式设备。
对于非有线方式的远程升级在应用层完成差分包数据的接收接收数据校验无误后产生复位单片机复位后进入BootLoader通过差分算法在BootLoader中还原新的应用程序。
差分升级可实现多台设备同时升级但需要再传输差分包的上位机上实现多个线程以确保每个任务之间都相互独立数据收发不产生干扰。
系统硬件设计 本系统嵌入式平台采用的是复旦微单片机 该芯片内核为 架构 最高主频为 总 容 量 为程 序 总 容 量 为路串口。系统硬件外围电路主要有时钟电路、复位电路、电源电路、串口电路和红外电路等。
系统软件设计
软件需要实现差分包升级首先通过上位机制作出新旧软件版本的差分包文件然后通过数据通信链路将差分包文件传输至嵌入式设备嵌入式设备接收到数据后再BootLoader启动程序中利用HDiffPatch算法中的patch将新程序还原出来还原成功后执行新应用程序。
将嵌入式设备程序运行过程划分为两个阶段第一阶段为BootLoader程序启动阶段第二阶段为Application应用程序运行阶段。
为了节约资源本系统无线方式的差分包数据接收在应用程序中完成应用程序本身具有无线功能借助无线功能同时完成差分数据包的接收节约空间资源。
差分升级流程 单片机Flash划分空间 HDiffPatch简介
HDiffPatch差分算法由HDiff和HPatch两种算法组成两种算法的时间复杂度计算方法相同为OnewSizeoldSize内存使用情况分别为newSizeoldSize*5O(1)字节当oldSize不小于2G时oldSize系数由5改为9和newSizeoldSizeO(1)字节。
HDiffPatch差分算法早期是用于安卓手机客户端的开源算法它可以跨平台使用。 在开源算法代码中通过调用create_diff(newData 字节数组oldData字节数组out diffData)函数生成了oldData到newData的差异数据diffData再调用patch(out newData,oldData,diffData)函数将设备中的oldData和接收到的diffData合成newData在Diff时可以将补丁包直接压缩在patch时无需提前解压。
系统测试
差分包的生成 本系统通过DiffPatch上位机直接生成差分包。
升级前文件路径为选取当前需要升级设备中的旧程序可执行文件。升级后文件路径为选取已经更新后的新程序可执行文件。单击生成即可在当前文件夹下生成旧程序的补丁文件。
差分包传输 差分包下传至设备有多种方式如有线串口、窄带物联网、红外、4G网络等。 本系统采用有线串口方式通过差分升级上位机将差分包数据传输至设备。
单击“读取版本”按钮即可确定版本号。接着单击“打开文件”按钮选择所需要传输的差分包。