小熊派鸿蒙社区
直播中

谭文锋

4年用户 11经验值
擅长:可编程逻辑 控制/MCU
私信 关注
[经验]

【BearPi-Pico H3863星闪开发板体验连载】LZO压缩算法移植

压缩算法使用

一、概述

压缩算法是一类用于减小数据大小的计算方法,它们在数据存储和传输领域扮演着重要角色。压缩算法的基本思想是通过去除数据中的冗余信息来减少数据的表示大小。压缩算法可以分为两大类:无损压缩算法和有损压缩算法。
压缩算法在无线通信中的应用可以显著提高数据传输效率和降低能耗,尤其是在资源受限的无线通信环境中。选择合适的压缩算法对于优化无线传输性能至关重要。

二、LZO压缩算法

LZO压缩算法,全称为Lempel-Ziv-Oberhumer算法,是一种无损数据压缩技术,以其快速的压缩和尤其是解压速度而闻名。以下是LZO压缩算法的一些关键特点和应用概述:

  1. 快速压缩和解压
    LZO算法特别注重解压速度,其解压操作非常迅速,几乎不需要额外的内存支持。这使得LZO非常适合对性能要求较高的场景,如实时系统或嵌入式设备。
  2. 压缩效率
    尽管LZO的压缩速度可能不如某些其他算法快,但它提供了多种压缩级别,可以根据需要选择合适的压缩比,同时保持较高的解压效率。
  3. 无损压缩
    作为一种无损压缩算法,LZO不会丢失原始数据的任何信息,保证了数据的完整性。
  4. 压缩级别多样
    LZO支持多种压缩级别,包括只需8KiB内存的级别,以适应不同的资源限制条件。
  5. 压缩和解压块大小一致
    LZO是一种块压缩算法,压缩和解压使用的块大小必须相同,这有助于在数据传输和存储中保持数据的一致性。
  6. 应用场景
    LZO由于其快速的解压速度和较小的资源占用,在需要快速解压的应用中非常有用,例如在网络传输速度发展迅速的今天,LZO可以在嵌入式领域中提供快速的数据解压。

三、移植

LZO算法的源码可以在

http://www.oberhumer.com/opensource/lzo/网站中下载C代码使用,对于MCU来说无需额外的配置和操作可以直接使用。

LZO算法具体的移植步骤如下

  1. 工程
    移植带有某种功能的代码可以新建一个工程,这样移植代码时,没有其他功能的高扰,能够更加专注的实现移植代码的功能以及调试代码。
    在HiSpark Studio中新建工程可以参考https://www.bearpi.cn/core_board/bearpi/pico/h3863/software/%E5%88%9B%E5%BB%BA%E7%AC%AC%E4%B8%80%E4%B8%AAHello%20World%E7%9A%84%E5%B7%A5%E7%A8%8B.html
  2. 添加文件
    添加文件就是添加对应功能的c文件,以及对应的头文件,添加完成之后就可以进行下一步。
    为了在移植过程中方便的看到代码的调试结果,可以在这个工程添加日志功能,这样在代码移植过程中可以方便调试,查看移植的代码是否按照正常工况运行。
    主要添加的文件有
    文件 添加.png

四、调试

当代码的文件天键完成后,就需要编译、调试代码。首先要保证添加的代码能够正常通过编译,后续才能调试代码的功能。
在HiSpark Studio移植LZO算法,遇到一些坑,

  1. 编译报错
    编译报错是移植代码过程中常见的错误,为什么HiSpark Studi算是一个坑呢?LZO算法我已经在其他的MCU上移植过,所以对于移植过程比较熟悉,但是HiSpark Studi中的一些规则是比较严格的,就比如在代码中存在没有使用的变量或数组是不能通过编译的,在其他的编译器中可能会报一个警告,在HiSpark Studi中我移植一直编译不过,卡在有为没有使用的代码段上,一直认为是添加文件过程有问题,以及在文件中有一些不能在BearPi-Pico H3863开发板上使用的代码。
    后面在偶然的情况下,看到了代码存在没有使用的变量或者数组会导致编译报错,在仔细检查代码,修改之后编译终于过了。
    不知道是否有配置把代码中未使用的变量或数组改成警告而不是错误的。

五、结果

LZO算法中的压缩算法能够在BearPi-Pico H3863正常实现,但是压缩算法还存在一定的问题,需要在研究。
解压算法不需要额外的RAM空间就能正常的运行。我在正常能过使用压缩的MCU中或者使用python压缩一段数据,然后报数据复制到工程中,使用解压算法对复制的算法解压,最后得到了与原始数据相同的数据,说明解压算法是正常能够使用的。
原始数据:
原始数据.png
原始数据是用来做数据校验的,数据大小在1024字节,压缩算法后续再更新。
压缩数据:
压缩数据.png
压缩数据是从其他的MCU中使用LZO压缩算法得到的,数据大小为561字节。原始数据是随机产生的,无损压缩看的字符重复,所以压缩率不是特别高。
解压数据和结果:
运行日志1.png

日志3.png

从结果上看LZO算法,单解压功能移植成功。

更多回帖

发帖
×
20
完善资料,
赚取积分