一种制造技术

技术编号:39723504 阅读:11 留言:0更新日期:2023-12-17 23:28
本发明专利技术涉及固件差分数据的压缩和解压技术领域,具体涉及一种

【技术实现步骤摘要】
一种MCU的低内存占用的压缩和解压方法及装置


[0001]本专利技术涉及固件差分数据的压缩和解压
,具体涉及一种
MCU
的低内存占用的压缩和解压方法及装置


技术介绍

[0002]使用主流压缩工具压缩差分数据可以获得较好的压缩效果,但是主流压缩工具对
RAM
要求较高,比如
gzip
要求至少
64k
内存,某些
RAM
小于
64K

MCU
无法使用此类压缩工具

同时,升级程序集成主流压缩工具后,升级程序的体积会增加
15k
,这对于某些低
ROM

MCU
将无法搭载升级程序


技术实现思路

[0003]针对现有技术中主流压缩工具对
RAM
要求较高,低
ROM

MCU
将无法搭载升级程序的问题,提供了一种低内存占用

轻量级的压缩和解压方案,尽量满足压缩率的前提下,利用分块压缩

减少字典等方法,减少解压时内存占用,因此,提出了一种
MCU
的低内存占用的压缩和解压方法及装置,为
MCU
升级程序提供更高的可用性和可移植性

[0004]为了实现上述专利技术目的,本专利技术提供了以下技术方案:一种
MCU
的低内存占用的压缩方法,包括以下步骤:获取原始数据流;将所述原始数据流经过平整处理得到平整数据流;依次采用基于下标法的
BWT
变换和基于桶排序法将相同的字节聚拢;得到预处理的数据流;基于游程编码思想的重复字节压缩法对所述预处理的数据流进行压缩处理,得到优化后的字节数组;根据字典树算法对优化后的字节数组中重复的数据结构进行压缩,并得到所述原始数据流对应的
huffman
码表;根据所述
huffman
码表对所述优化后的字节数组进行编码,得到压缩文件

[0005]作为优选方案,所述平整处理包括以下步骤:将所述原始数据流划分为若干字节,为每个字节创建三倍长度的字节数组;遍历每个字节,若字节的值小于或等于
16
,则将字节存入字节数组,否则,按照得到
16
加上字节的值除
16
取整和字节的值对
16
取余的值计算后,将得到的数值存入字节数组;根据预先设置的数据转换表格
table1
,将所述字节数组中的数进行转换,得到平整数据流

[0006]作为优选方案,基于桶排序法主要包括以下步骤:在平整数据流的最后增加
10
,并生成
BWT

node
列表;设初始化变量为
size

size=0
,在
BWT

node
列表中
size
指向列数值相同且连续的
行视为一个桶,对所有桶进行降序排序;重复以下步骤,直到无法产生新桶:
size= size +1
,对桶内
size
指向列数值相同且连续的行视为新桶,对新桶进行降序排序

[0007]作为优选方案,基于下标法的
BWT
变换主要包括以下步骤:在平整数据流的最后增加
10
,并生成
BWT

node
列表;在
BWT

node
列表中寻找字节与字节相邻且字节值相同的字节段的起始点和结束点,得到该值的起始点和结束点;接着将起始点和结束点间的节点的值赋值为
node.(idx+size)
;对起始点和结束点之间的节点的值进行升序排序;利用递归,重复上述操作,传入递归方法的
size+1
,直到所有节点排序完毕,得到
BWT
矩阵的起始列和末尾列

[0008]作为优选方案,基于游程编码思想的重复字节压缩法包括以下步骤:经过平整处理后的数据流为
RDS

F

BB

RDS

F

BB
需要压缩的字节有9位,顺序遍历
RDS

F

BB
中每个字节
i

i
连续出现
n
次,若
n≤2
,将
n*i
存入
TCB
中;若
n
>2,将
i

11
存入
TCB
,将
n
存入
TLB
;创建字节数组
LZCB
和字节数组
LZDB
;定义虚拟窗口
TCW

TCW

TCB
自左向右滑动,
TCW
左边区域为
TCW

L

TCW
右边区域为
TCW

R

TCW
长度为
32B
,为编码区;
TCW

L
为已编码区;
TCW

R
为未编码区;利用
LZSS
算法,
TCW

TCW

L
寻找重复的结构信息并进行压缩,包括: TCW
位于
TCB
最左端;设
TCW

L

TCW
存在重复结构信息长度为
n
,重复结构信息与
TCW
的距离为
d
,若
n=0

TCW

TCB
上右移一个字节,
LZCB
存入
TCW
第一个字节;若
0<n<2

TCW

TCB
上右移
n
个字节,
LZCB
存入
TCW

n
个字节;若
n>2

TCW

TCB
上右移
n
个字节,
LZCB
存入(
12+n
),
LZDB
存入
d

TCW
移出
TCB
时结束压缩,<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种
MCU
的低内存占用的压缩方法,其特征在于,包括以下步骤:获取原始数据流;将所述原始数据流经过平整处理得到平整数据流;依次采用基于下标法的
BWT
变换和基于桶排序法将相同的字节聚拢;得到预处理的数据流;基于游程编码思想的重复字节压缩法对所述预处理的数据流进行压缩处理,得到优化后的字节数组;根据字典树算法对优化后的字节数组中重复的数据结构进行压缩,并得到所述原始数据流对应的
huffman
码表;根据所述
huffman
码表对所述优化后的字节数组进行编码,得到压缩文件
。2.
如权利要求1所述的一种
MCU
的低内存占用的压缩方法,其特征在于,所述平整处理包括以下步骤:将所述原始数据流划分为若干字节,为每个字节创建三倍长度的字节数组;遍历每个字节,若字节的值小于或等于
16
,则将字节存入字节数组,否则,按照字节的值除
16
取整加上
16
和字节的值对
16
取余的值计算后,将得到的数值存入字节数组;根据预先设置的数据转换表格
table1
,将所述字节数组中的数进行转换,得到平整数据流
。3.
如权利要求2所述的一种
MCU
的低内存占用的压缩方法,其特征在于,基于桶排序法主要包括以下步骤:在平整数据流的最后增加
10
,并生成
BWT

node
列表;设初始化变量为
size

size=0
,在
BWT

node
列表中
size
指向列数值相同且连续的行视为一个桶,对所有桶进行降序排序;重复以下步骤,直到无法产生新桶:
size= size +1
,对桶内
size
指向列数值相同且连续的行视为新桶,对新桶进行降序排序
。4.
如权利要求3所述的一种
MCU
的低内存占用的压缩方法,其特征在于,基于下标法的
BWT
变换主要包括以下步骤:在平整数据流的最后增加
10
,并生成
BWT

node
列表;在
BWT

node
列表中寻找字节与字节相邻且字节值相同的字节段的起始点和结束点,得到该值的起始点和结束点;接着将起始点和结束点间的节点的值赋值为
node.(idx+size)
;对起始点和结束点之间的节点的值进行升序排序;利用递归,重复上述操作,传入递归方法的
size+1
,直到所有节点排序完毕,得到
BWT
矩阵的起始列和末尾列
。5.
如权利要求4所述的一种
MCU
的低内存占用的压缩方法,其特征在于,基于游程编码思想的重复字节压缩法包括以下步骤:经过平整处理后的数据流为
RDS

F

BB

RDS

F

BB
需要压缩的字节有9位,顺序遍历
RDS

F

BB
中每个字节
i

i
连续出现
n
次,若
n≤2
,将
n*i
存入
TCB
中;若
n
>2,将
i

11
存入
TCB
,将
n
存入
TLB
;创建字节数组
LZCB
和字节数组
LZDB
;定义虚拟窗口
TCW

TCW

TCB
自左向右滑动,
TCW
左边区域为
TCW

L

TCW
右边区域为
TCW

R

TCW
长度为
32B
,为编码区;
TCW

L
为已编码区;
TCW

R
为未编码区;利用
LZSS
算法,
TCW

TCW

L
寻找重复的结构信息并进行压缩,包括: TCW
位于
TCB
最左端;设
TCW

L

TCW
存在重复结构信息长度为
n
,重复结构信息与
TCW
的距离为
d
,若
n=0

TCW

TCB
上右移一个字节,
LZCB
存入
TCW
第一个字节;若
0&lt;n&lt;2

TCW

TCB
上右移
n
个字节,
LZCB
存入
TCW

n
个字节;若
n&gt;2

TCW

TCB
上右移
n
个字节,
LZCB
存入(
12+n
),
LZDB
存入
d

TCW
移出
TCB
时结束压缩,
n
表示
TCW
有多少个字节的重复数据,
d
表示
TCW
中的重复数据距离上一次最近出现的数据的字节数,
TCW
是游程编码缓冲器虚拟窗口,
TCB
是游程编码缓冲区,
DLB
是距离和长度缓存器,
TLB
是游程长度缓冲区
。6.
如权利要求5所述的一种
MCU
的低内存占用的压缩方法,其特征在于,根据字典树算法对优化后的字节数组中重复的数据结构进行压缩包括以下步骤:对
TCB
进行
LZSS
编码,将
TCB
每个字节和其后
31
个字节作为子串
TCB

F
,将所有
TCB

F
生成一颗字典树,每个节点需附带一串坐标信息,出现在此节点的字节的在
T...

【专利技术属性】
技术研发人员:欧上榜魏波
申请(专利权)人:成都万创科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1