• 在bootloader及IAP中使用zlib解压缩


    原有的bootloader方案是在片内FLASH上面分成3块,bootloader区占一小块,然后剩下区域平分成两块,一块是运行区,一块是新固件临时存储区。

    好在现在FLASH在系统成本中占的比例越来越低了,不然这样用肯定很奢侈浪费了。

    在此方案基础上,我们还可以使用压缩功能,这样临时存储区可以更小一些,可以释放出更多空间给运行区。

    压缩算法格式综合考虑后使用gzip,解压程序使用zlib。

    因为gzip格式比较通用,方便压缩和调试。而解压所消耗的资源也尚可接受。

    一般测试下来,gz所用的 deflate 压缩算法大概有75%的压缩率。

    所以建议使用压缩后的运行区与临时存储区的大小比例为  4:3 比较合适。

    不过压缩率跟原文特征有很大关系,

    因此,生成固件时,除原文不能大于运行区的大小以外,还要限制压缩后的体积不能大于临时存储区的大小。

    另外,如果系统传输有使用加密技术的话,一定要先压缩再加密。

    因为加密后的数据压缩率很小,甚至会有压缩后的体积大于原文的情况。

    最后看下zlib解压消耗资源情况:

    实测在某cortex-M3/4的系统上面,zlib只启用解压功能,CRC32把table放在RAM中,在末进行其它特别优化的情况占用FLASH在15KB左右。

    而解压文件时,消耗的RAM在32KB+9KB,不过一般bootloader或IAP时,其它功能处于禁用状态,所以RAM一般都是可以满足的。

    所以,只要固件被压缩下来的体积大于20~30KB就可以考虑使用压缩算法了。

    解压速度(120Mhz cortex-M3):

    输入输出缓冲块均为16字节
    初始化5us,解压1.8KB数据2.1ms,结束上下文7us.
    初始化5us,解压150KB数据150ms,结束上下文7us.

    输入输出缓冲块均为64字节
    初始化5us,解压150KB数据100ms,结束上下文7us.

  • 相关阅读:
    Spring Boot + Vue 开发前后端分离的员工管理系统
    树莓派4B部署docker
    免费的论文查重网站
    JavaScript设计模式
    js继承的用法
    js闭包与柯里化
    Javascript编程小技巧
    spy-debugger和fiddler实现移动端抓包
    grid布局
    js判断对象是否为空对象的几种方法
  • 原文地址:https://www.cnblogs.com/aozima/p/4572626.html
Copyright © 2020-2023  润新知