一种应用程序多次压缩解压方法

文档序号:6373130阅读:329来源:国知局
专利名称:一种应用程序多次压缩解压方法
技术领域
本发明涉及机盘上FLASH存储空间内应用程序存储、运行技术领域,具体说是一种应用程序多次压缩解压方法。尤指一种应用程序制作时多次压缩,启动时多次解压的方法。
背景技术
由于机盘上FLASH存储空间的大小有限,用于存放应用程序的空间往往也限定了大小。为了使较大的应用程序能够存储在较小的FLASH空间内,一般情况下制作应用程序时都会对应用程序进行压缩,当压缩后的应用程序启动时,CPU不能直接执行压缩后的应用程序,所以还需要对压缩后的应用程序进行解压处理。随着软件功能的不断增加,应用程序大小也在不断加大,会出现应用程序过大而·没有足够的FLASH空间存放的问题。如果增大FLASH大小就会增加硬件成本,而且CPU支持的FLASH空间大小也不是无限大的,并且已经生产使用的机盘再增加FLASH硬件也是不现实的,应用中就出现了由于应用程序过大而导致没有足够空间存储的问题。

发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种应用程序多次压缩解压方法,在制作应用程序时多次压缩,实现了大的应用程序经过多次压缩体积变小,最终实现小FLASH空间存储大应用程序的目的;当压缩后的应用程序启动时,压缩后的应用程序自动完成多次解压、拷贝和内存清理,最终得到能够被CPU执行的应用程序,并且放在正确的内存空间,为应用程序的执行做好准备;节省了硬件成本。为达到以上目的,本发明采取的技术方案是
一种应用程序多次压缩解压方法,其特征在于,包括以下几个步骤
第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;
多次压缩的具体步骤如下
O首先编译生成没有压缩的应用程序;
2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压;
3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头;
4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM能够解压的压缩算法对应用程序进行压缩;
5)对最终压缩好的应用程序添加用于检查和校验的文件头;
第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。在上述技术方案的基础上,压缩后的应用程序启动的具体步骤如下
O板卡启动完成硬件初始化;
2)BOOTROM拷贝自己到内存中;
3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间;
4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离; 5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间;
6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间;
7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间;
8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。在上述技术方案的基础上,每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。本发明所述的应用程序多次压缩解压方法,提供了一套完整的制作时多次压缩,启动时多次解压及内存空间分配方案,在制作应用程序时多次压缩,实现了大的应用程序经过多次压缩体积变小,最终实现小FLASH空间存储大应用程序的目的;当压缩后的应用程序启动时,压缩后的应用程序自动完成多次解压、拷贝和内存清理,最终得到能够被CPU执行的应用程序,并且放在正确的内存空间,为应用程序的执行做好准备;该方法能够在不改变硬件FLASH存储空间的条件下存储更大的应用程序,这样既节省了硬件成本又能满足原有软件的兼容。


本发明有如下附图
图I 二次压缩应用程序制作过程 图2 —次压缩程序启动过程 图3 二次压缩程序启动流程 图4 二次解压内存使用示意图。
具体实施例方式以下结合附图对本发明作进一步详细说明。本发明所述的应用程序多次压缩解压方法,包括以下几个步骤
第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;
多次压缩的具体步骤如下
1)首先编译生成没有压缩的应用程序,即可以被CPU直接执行的应用程序,该应用程序为首个版本,或对当前版本的升级;
2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压;
3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头;压缩的总次数大于等于2 ;
4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM (自动启动技术,该技术用于使存储于FLASH内的程序可自动执行一次)能够解压 的压缩算法对应用程序进行压缩;最后一次压缩时选用BOOTRO能够解压的压缩算法是为了保证第一次解压BOOTROM能够自己完成;
5)对最终压缩好的应用程序添加用于检查和校验的文件头;该文件头用于FLASH烧写时文件的检查和校验;
第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。需要注意的是,应用程序不可能被无限的压缩变小。压缩和解压必须按照一定的顺序进行,这个顺序就是先压缩的后解压,压缩和解压的顺序必须一一对应。另外 第一步执行完后,该携带有用于检查和校验的文件头的最终压缩好的应用程序需要烧写到FLASH内,然后才能利用BOOTROM技术执行第二步所说的“压缩后的应用程序启动”,由于“烧写到FLASH内”不是本发明的研究重点,且可采用现有公知技术实施,故不在详述。在上述技术方案的基础上,压缩后的应用程序启动的具体步骤如下
O板卡启动完成硬件初始化;
2)BOOTROM拷贝自己到内存中;
3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间;
4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离;
5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间;
6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间;
7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间;
8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。在上述技术方案的基础上,每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。
为了减小应用程序的体积,本发明采用了应用程序多次压缩的方法减小体积,程序烧写进FLASH之后,启动时对压缩程序进行多次自动解压和拷贝,最终得到可以被CPU执行的应用程序,并把这个应用程序放在能够被CPU执行的内存空间。(I)、压缩制作应用程序。应用程序生成后,采用不同的压缩算法对应用程序进行多次压缩,每次压缩完成后,需要给压缩后的应用程序添加自解压头,自解压头能够当压缩后的应用程序启动时完成本次压缩的自动解压。最后一次压缩应该采用BOOTROM能够解压的压缩算法,以便BOOTROM能够完成第一次解压。程序的压缩指定了压缩算法和顺序后,在程序编译时可以采用压缩工具自动生成压缩文件和添加自解压头,最终生成可以烧写FLASH的应用程序。(2)、程序启动时解压应用程序。启动时,BOOTROM完成硬件的初始化之后,BOOTROM首先拷贝自己到内存,然后开始解压应用程序,BOOTROM完成第一次应用程序解压,并把解压后的文件放在正确的内存空间(这个解压后的文件包括自解压头和压缩程序两部分),然 后分别拷贝自解压头和压缩文件到不同的内存空间,实现自解压头和压缩文件的分离,然后清理拷贝前压缩程序占用的内存空间。自解压头再次对压缩文件进行解压,并把解压后的应用程序放在能够被CPU执行的内存空间。按照上面的步骤,根据应用程序压缩的次数对压缩程序进行多次解压,解压次数和压缩次数必须一样,并且按照先压缩后解压的顺序进行,最终得到能够被CPU执行的应用程序,并且放在能够被CPU执行的内存空间。程序启动时,自动拷贝压缩文件和自解压头到正确的内存空间并且完成解压,经过多次解压和内存清理后最终得到可以被CPU执行的应用程序。(3)、清理内存空间。程序在解压过程中,自解压头和压缩程序都会占用内存空间,当一次解压完成后,需要清理使用过的内存空间,以供下次解压使用,解压完成后,清理完内存之后才能开始执行应用程序。下面以vxworks操作系统下二次压缩解压为例,对应用程序的压缩制作和解压启动过程做详细的介绍。两次压缩分别采用vxworks的deflate压缩算法和7zip压缩算法。例如部分机盘FLASH里用于存放应用程序大小的空间被限制在5M以内,随着应用程序的不断增大,经过deflate压缩之后的应用程序大小超过了 5M,大小超过了 FLASH空间的限定,不能直接烧写进FLASH,就需要对应用程序进行第二次压缩。压缩文件的制作过程如图I所示,在编译生成xvworks. bin文件之后,首先使用7zip压缩算法对文件进行第一次压缩,压缩完成后,给压缩后的文件添加自解压头,这个自解压头具有解压7zip压缩文件的功能。添加了自解压头的7zip压缩文件由于大小还不能满足FLASH大小的要求,需要对其进行第二次压缩。第二次压缩采用vxworks的deflate压缩算法(如果第二次压缩后文件大小还不能满足FLASH大小的要求,就需要进行三次压缩,但最后一次压缩必须是vxworks BOOTROM能够解压的deflate压缩算法,需要注意的是文件不可能被无限的压缩变小,压缩到一定程度后再次压缩就没有多大效果),压缩完成后需要给压缩文件添加256字节文件头,这个用于文件的检查和校验。经过二次压缩,添加了文件头的压缩程序大小有3M多,这个压缩程序就可以用来烧写FLASH。程序启动时,二次压缩程序的启动要比一次压缩的启动过程复杂。首先介绍一次压缩程序的启动过程。如图2所示,在vxworks操作系统下,BOOTROM首先完成硬件的初始化,硬件初始化完成之后,BOOTROM就会拷贝自己到地址为0x100000的内存空间,接着程序会跳转到内存执行,BOOTROM解压压缩程序到地址为0x200000的内存空间(B00TR0M能够解压deflate压缩的程序),解压完成后就跳转到应用程序的起始地址开始执行应用程序。由于经过二次压缩的应用程序在启动时需要进行两次解压,所以二次压缩程序的启动比一次压缩的要复杂些,如图3所示,二次压缩程序的启动在完成硬件的初始化之后,第一次经过BOOTROM的解压,把解压后的文件放在内存地址为0x200000的地址空间,第一次解压后的应用程序仍然是个压缩文件,这个压缩文件不能被CPU执行,所以需要进行第二次解压。经过BOOTROM解压后的文件是7zip压缩文件,这个文件由自解压头和压缩文件两部分组成,首先把7zip的自解压头拷贝到地址为0x100000的内存空间,把7zip的压缩文件拷贝到地址为0x7000000的内存空间,把自解压头和压缩文件分离开之后,用自解压头对压缩文件进行第二次解压,把解压出来的程序放在地址为0x200000的内存空间,这个解压后的程序就是CPU能够执行的应用程序。清理使用过的内存之后,CPU就从内存地址为0x200000开始执行应用程序,完成软件的启动,如果需要进行更多次解压,就按照上面的步骤重复程序拷贝和解压即可。在这个启动过程中,内存的使用和程序的拷贝如图4所示,首先BOOTROM拷贝自己到地址为0x100000的内存空间,当BOOTROM完成对应用程序的第一次解压之后,就会释放 自己占用的内存空间,之后7zip压缩文件的自解压头被拷贝到这个内存空间。BOOTROM解压出来的7zip压缩文件和自解压头放在内存地址为0x200000的地址空间,当自解压头和压缩文件完成拷贝时,这个地址空间就要被释放,以便7zip的压缩文件能够再次解压到这个地址空间(如果需要更多次解压,只要这样重复拷贝程序和清理内存空间即可),当最后一次解压完成后,清理解压前用过的内存空间,之后CPU开始执行应用程序完成启动。上述方法实现了用较小的FLASH空间存放较大应用程序的目的,不但节省了硬件成本,也有利于程序的兼容。本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
权利要求
1.一种应用程序多次压缩解压方法,其特征在于,包括以下几个步骤 第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上; 多次压缩的具体步骤如下 1)首先编译生成没有压缩的应用程序; 2)用一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头,该自解压头用于当压缩后的应用程序启动时能够自动完成对本次压缩的解压; 3)根据需要确定压缩的总次数,然后用另一种压缩算法对应用程序进行压缩,给压缩后的应用程序添加自解压头; 4)重复步骤3),直到压缩次数等于需要压缩的总次数,且在执行最后一次压缩时,选用BOOTROM能够解压的压缩算法对应用程序进行压缩; 5)对最终压缩好的应用程序添加用于检查和校验的文件头; 第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。
2.如权利要求I所述的应用程序多次压缩解压方法,其特征在于,压缩后的应用程序启动的具体步骤如下 1)板卡启动完成硬件初始化; 2)BOOTROM拷贝自己到内存中; 3)BOOTROM完成对最终压缩好的应用程序的第一次解压,并把解压后的应用程序放在正确的地址空间; 4)解压后的应用程序包括自解压头和压缩文件两部分,把自解压头和压缩文件分别拷贝到不同的内存空间,实现压缩文件和自解压头的分离; 5)自解压头和压缩文件拷贝完成后,清理原来程序占用的内存空间; 6)自解压头完成与其对应的压缩文件的解压,并再次把解压后的应用程序放在正确的地址空间; 7)根据应用程序压缩的总次数,重复步骤4)、5)和6),依次完成应用程序的多次解压,最终得到能够被CPU执行的没有压缩的应用程序,并把这个没有压缩的应用程序放在能够被CPU执行的内存空间; 8)清理使用过的内存,CPU开始执行没有压缩的应用程序,完成没有压缩的应用程序的启动。
3.如权利要求2所述的应用程序多次压缩解压方法,其特征在于每次解压完成后,判断解压结果是否正确,如果正确就进行下一步,如果不正确就重新解压再次判断,如果连续三次解压都不正确,则认为应用程序损坏。
全文摘要
本发明涉及一种应用程序多次压缩解压方法,第一步,在制作新版本的应用程序时,对应用程序进行多次压缩,以达到减小新版本的应用程序体积的目的,且多次压缩时每一次均采用不同的压缩算法,所述多次指两次以上;第二步,当压缩后的应用程序启动时,对经过多次压缩的应用程序进行多次解压、拷贝和内存清理,最终得到CPU能够执行的应用程序。本发明所述的应用程序多次压缩解压方法,提供了一套完整的制作时多次压缩,启动时多次解压及内存空间分配方案,能够在不改变硬件FLASH存储空间的条件下存储更大的应用程序,这样既节省了硬件成本又能满足原有软件的兼容。
文档编号G06F11/36GK102779060SQ20121023931
公开日2012年11月14日 申请日期2012年7月11日 优先权日2012年7月11日
发明者吴军平, 杨帅伟 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1