一种基于音频处理器的系统固件压缩方法及其解压缩方法
技术领域
本发明涉及一种压缩方法及解压缩方法,尤其涉及一种基于音频处理器的系统固件压缩方法及其解压缩方法。
背景技术
在传统的音频处理器系统中,开发者通过编译器将软件源代码编译成镜像文件,如*.axf、*.hex、*.bin、*.coff、*.ais等格式文件,再通过各种烧录器将镜像文件烧写到存储介质当中,其中存储介质有诸如sd卡、nand flash、nor flash、spi flash和MCU内部闪存等,其中有些存储介质不可以用于执行代码如sd卡、nand flash和spi flash,这些部件在音频处理器系统中仅充当存储介质,系统启动时,需通过内部启动程序先加载这些存储介质中的软件镜像到内存中,然后跳转到软件镜像的入口地址,软件镜像得以正确执行。当音频处理器功能变得更复杂时,软件镜像将变得庞大,这时候我们需要选择存储空间更大的存储介质,烧录存储介质的时间也变得更长,而在真正的产品开发中,不仅需要考虑生产效率问题,还要考虑系统成本的问题;因此,必须要寻找一种更优的方案来解决以上问题,而不是接受这种让人吃力不讨好的方案。
发明内容
本发明所要解决的技术问题是需要提供一种能够通过更小的容量存储介质容纳更复杂的音频处理器的系统固件软件镜像,以实现优化烧录镜像存储介质时间等目的的系统固件压缩方法及其解压缩方法。
对此,本发明提供一种基于音频处理器的系统固件压缩方法,包括以下步骤:
步骤S1,对基于音频处理器的系统固件进行字符串压缩编码,得到压缩后的功能程序段,所述功能程序段为系统固件源数据对应的各段功能程序;
步骤S2,加入解压缩程序段的字符串,得到未经压缩的解压缩程序段;
步骤S3,将未经压缩的解压缩程序段和压缩后的功能程序段合在一起,并生成软件镜像。
本发明的进一步改进在于,所述步骤S1中,在对系统固件进行字符串压缩编码时,加入各段功能程序的运行地址。
本发明的进一步改进在于,所述步骤S1通过哈夫曼编码压缩算法对系统固件的源数据进行字符串压缩编码。
本发明的进一步改进在于,所述步骤S1中,包括以下子步骤:
步骤S101,统计出系统固件的源数据中各个字符出现频率;
步骤S102,按照出现频率对各个字符进行排序;
步骤S103,根据排序构建哈夫曼树的编码结构;
步骤S104,依据哈夫曼树的编码结构对字符串进行编码。
本发明的进一步改进在于,所述步骤S1中,还包括步骤S105,将编码后的功能程序段进行按位存储。
本发明的进一步改进在于,还包括步骤S4,将步骤S3生成的软件镜像烧录至存储介质中。
本发明的进一步改进在于,所述音频处理器的系统固件为基于OmapL138的系统固件。
本发明的进一步改进在于,步骤S1中,得到压缩后的功能程序段后生成功能程序镜像,所述步骤S2中,通过未经压缩的解压缩程序段生成解压缩程序镜像,所述步骤S3将功能程序镜像和功能程序镜像合在一起生成软件镜像。
本发明还提供一种基于音频处理器的系统固件解压缩方法,所述系统固件解压缩方法用于对上述的软件镜像进行解压缩。
本发明的进一步改进在于,包括以下步骤:
步骤A,启动并加载整个软件镜像到内存中;
步骤B,跳转到解压缩程序段的程序入口,通过解压缩程序对压缩后的功能程序段的镜像文件进行解压缩得到原始的功能程序镜像数据;
步骤C,根据功能程序镜像数据将数据拷贝至各段的运行地址;
步骤D,跳转至功能程序段入口,正常运行所述系统固件。
与现有技术相比,本发明的有益效果在于:能够使得原有系统固件的软件镜像变为更小的镜像,解决了存储介质过小存储不足问题,从而可以选择小容量存储介质,达到了降低成本的目的;而因为系统固件的软件镜像变得更小时,将缩短整个系统固件的软件升级时间,同时也降低了设备升级过程当中出错的概率,提高了产品的稳定性;由于系统固件的软件镜像变得更小,缩短了烧录镜像文件的时间,从而提高了生产效率,减少了人力成本,加之,由于存储介质中的功能程序段镜像被压缩,可防止黑客对存储介质读出并直接进行静态分析从而得到一些程序关键的信息,提高了产品的保密性。
附图说明
图1是本发明一种实施例的工作流程示意图;
图2是本发明一种实施例步骤S1的工作流程示意图;
图3是本发明一种实施例哈夫曼树的编码结构示意图;
图4是本发明一种实施例的工作原理示意图。
具体实施方式
下面结合附图,对本发明的较优的实施例作进一步的详细说明。
如图1所示,本例提供一种基于音频处理器的系统固件压缩方法,包括以下步骤:
步骤S1,对基于音频处理器的系统固件进行字符串压缩编码,得到压缩后的功能程序段,所述功能程序段为系统固件源数据对应的各段功能程序;
步骤S2,加入解压缩程序段的字符串,得到未经压缩的解压缩程序段;
步骤S3,将未经压缩的解压缩程序段和压缩后的功能程序段合在一起,并生成软件镜像。
如果对一段数据进行非失真压缩可以去掉数据当中的冗余部分使数据变得更小,但是数据中的信息量并不会改变;而通常烧录到存储介质中的软件镜像含有较大数据冗余,故可以对软件镜像进行压缩。
本例所述步骤S1中,在对系统固件进行字符串压缩编码时,加入各段功能程序的运行地址,以便在解压缩之后,能够快速便捷地找到各段功能程序的运行地址;所述步骤S1通过哈夫曼编码压缩算法对系统固件的源数据进行字符串压缩编码。
如图2所示,本例所述步骤S1中,优选包括以下子步骤:
步骤S101,统计出系统固件的源数据中各个字符出现频率;
步骤S102,按照出现频率对各个字符进行排序;
步骤S103,根据排序构建哈夫曼树的编码结构;
步骤S104,依据哈夫曼树的编码结构对字符串进行编码;
步骤S105,将编码后的功能程序段进行按位存储。
本例所述步骤S104中,依据哈夫曼树的编码结构对字符串进行编码,即为依据哈夫曼树的编码结构对源数据的字符串进行编码;本例还优选包括步骤S4,将步骤S3生成的软件镜像烧录至存储介质中;所述音频处理器的系统固件优选为基于OmapL138的系统固件;步骤S1中,得到压缩后的功能程序段后生成功能程序镜像,所述步骤S2中,通过未经压缩的解压缩程序段生成解压缩程序镜像,所述步骤S3将功能程序镜像和功能程序镜像合在一起生成软件镜像,这样操作能够便于整个系统固件的软件镜像的生成,降低出错率。
在本例中,优选采用了哈夫曼编码压缩算法;哈夫曼编码的主导思想是根据字符出现的概率来构造平均长度最短的编码,并且保存编码的唯一可解性。例如一个系统固件源数据的字符串是abcabcabcabcabcabcddddddddd,其中a、b和c的出现次数均为6次,d的出现次数为9次;按照一般的存储方法,一个字符占用一个字节,需要27个字节来存储该字符串;本例采用哈夫曼进行压缩编码时,可首先构建哈夫曼树的编码结构,如图3所示。
然后再根据图3的编码结构对字符串进行编码,得出001,1000,0110,0001,1000,0110,0001,1000,0110,1111,1111,1111,1111,11,这里是按位存储,之前的27字节就被压缩到了7字节,这样,在解压的时候按照哈夫曼树译码进行还原;其压缩编码的框图如图2所示。
而对应的解压缩过程相对比较简单,直接根据构建的哈夫曼树进行译码得到源数据。
因此,本例还提供一种基于音频处理器的系统固件解压缩方法,所述系统固件解压缩方法用于对上述的软件镜像进行解压缩。
本例所述系统固件解压缩方法包括以下步骤:
步骤A,启动并加载整个软件镜像到内存中;
步骤B,跳转到解压缩程序段的程序入口,通过解压缩程序对压缩后的功能程序段的镜像文件进行解压缩得到原始的功能程序镜像数据;
步骤C,根据功能程序镜像数据将数据拷贝至各段的运行地址;
步骤D,跳转至功能程序段入口,正常运行所述系统固件。
本例的实现原理和方案如图4所示,基于可行性分析之后得知软件镜像可以压缩,但是当软件镜像加载到内存中后要得以执行,就必须把数据还原成主MCU可以识别的指令和实际的数据,还原的过程在这里其实就是所述系统固件解压缩方法的工作过程。
所述系统固件解压缩方法的工作过程在音频处理器的主MCU中完成,而且解压缩部分是不能被压缩,否则MCU无法进行译指,系统将跑飞,所以这里将整个系统固件的软件镜像分为两部分,一部分是未经压缩的解压缩程序段,另一部分为压缩后的功能程序段,两部分合在一起成为最终的软件镜像。主MCU启动时会加载整个软件镜像到内存中,而后跳转到解压缩程序段的程序入口,解压缩程序将对第二部分亦即功能程序段的功能程序镜像进行解压缩得到原始的镜像数据,然后再根据镜像数据将数据拷贝至各段的运行地址,最后执行跳转至功能程序段入口,使得系统正常运行。
综上,本例能够使得原有系统固件的软件镜像变为更小的镜像,解决了存储介质过小存储不足问题,从而可以选择小容量存储介质,达到了降低成本的目的;而因为系统固件的软件镜像变得更小时,将缩短整个系统固件的软件升级时间,同时也降低了设备升级过程当中出错的概率,提高了产品的稳定性;由于系统固件的软件镜像变得更小,缩短了烧录镜像文件的时间,从而提高了生产效率,减少了人力成本,加之,由于存储介质中的功能程序段镜像被压缩,可防止黑客对存储介质读出并直接进行静态分析从而得到一些程序关键的信息,提高了产品的保密性。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。