需求:设备通过2G或NBIOT网络进行固件升级。固件大小在100KB左右。由于所处的环境有干扰等问题,经实践发现,20KB的固件大小,升级失败的情况往往不多。因此,如何将本来100KB的固件,降低到20KB即可升级完成。
方案:1、固件压缩:用BOOTLOADER负责解压。这样会单独占用为数不多的RAM/FLASH来存储压缩文件,然后解压。单纯压缩,压缩比未必能满足需求。
2、将应用程序分为两部分:不易改变的库和易变的应用程序。通常,占比最大的,往往是驱动程序,操作系统。而这些往往不易变动。就算变动了,大不了升级一下即可。
因此,做了以下改动:
系统采用RT-Thread操作系统。总体布局分为:
BOOTLOADER,softdevice,application三个独立的地址范围。
BOOTLOADER负责判断softdevice和application是否有更新,如果更新了,则加载到内部FLASH。通过共享内存写入error值,判断应用程序是否工作正常,error累加到一定值,BOOTLOADER将会加载出厂的sd和app到FLASH。

softdevice是一个完成的RT-Thread工程,加载了设备驱动、kernel,内存管理和shell等,运行idle,tshell,和mainthread(我添加的),就是个正常的应用程序。在mainthread中,跳转到application。在softdevice中,使用链接脚本和链接预编译,将需要暴露给application的函数,变量,导入到指定的符号section,并将该section的起始地址写入共享内存。

application将读取共享内存参数。正常启动的话,将在线程中清空error值,及时喂看门狗,防止复位。然后,我需要使用的函数,会在符号section中进行搜索,找到其PC值,然后跳转执行。这样,只需要一个类似dlsym的函数,就可以搜索和查找softdevice中导出的函数,因此,application将会很小,方便升级。
注意:thumb模式下,PC值最低位为1,否则会hardfault。
我使用的是IAR for ARM,使用:
const struct rt_module_symtab xxx_func SECTION(“RTMSymTab”) = {};的方式,指定将xxx_func变量,放到RTMSymTab section中。同时,要在ICF文件中keep这个section。
IAR提供了__section_begin __section_end。这样可以得到RTMSymTab的起始地址,传递给共享内存。
共享内存也是在IAR icf文件中划分出来的一片区域,三个独立的程序均支持。来传递信息。
application就相当于是softdevice的一个线程罢了。这样,application可以很短小。类似的,还可以通过划分section 的方式,扩展多个application,让每个application更加小,方便单独升级。

MCU程序布局----优化升级方式相关推荐

  1. audio 小程序 放大_微信小程序搜索优化指南

    微信在2019年重点对搜索进行了升级,开放了小程序基于页面的搜索,搜索将不再局限于搜索具体的某一个小程序名称,"小程序名称"的优势已经下落神坛.目前搜索是当下小程序唯一的自然流量来 ...

  2. 深入探索Android布局优化(上)

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...

  3. 百度智能小程序搜索优化指南(基础版)

    目录  一.为什么百度搜索喜欢智能小程序 二.开发前必读内容 2.1 必须了解的搜索知识 2.2 掌握常用工具 2.3 如何搭建智能小程序更友好 三.智能小程序资源如何进入搜索 3.1 接入自然搜索结 ...

  4. app架构图,写给Android开发的小程序布局指南,讲的明明白白!

    前言 最近我一直在面试高级工程师,不管初级,高级,程序员,我想面试前,大家刷题一定是是少不了吧. 我也一样,我在网上找了很多面试题来看,最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性 ...

  5. android布局优化方案,Android启动优化-布局优化

    Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...

  6. Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存 ...

  7. android包内存放视频,Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...

    为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向.原因 & 具体优化 ...

  8. Android布局加载慢,Android布局优化(四)X2C — 提升布局加载速度200%

    系列文章 前言 在Android布局优化(一)从布局加载原理说起中我们说到了布局加载的两大性能瓶颈,通过IO操作将XML加载到内存中并进行解析和通过反射创建View.这里介绍一种避免运行时通过IO操作 ...

  9. Android系统性能优化(69)---含内存优化、布局优化

    Android性能优化:含内存优化.布局优化 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优 ...

  10. Android系统性能优化(59)----代码、图片和布局优化

    Android优化系列--代码.图片和布局优化 这篇文章分为三个部分代码优化.图片优化.布局优化,尽量每个方法都写了小的Demo! 代码优化:不要做多余的工作,尽量避免次数过多的内存的分配,(需要对a ...

最新文章

  1. 用 Python 制作酷炫的可视化大屏,特简单!
  2. 生存分析-从survdiff函数中提取P值
  3. 谷歌TPU训练BERT只要23秒,华为AI芯片达国际领先水平,MLPerf v0.7出炉
  4. MySQL5.6 主从复制配置
  5. 把Python的200个标准库分类整理了下,供参考
  6. flex 3名域namespace的使用有的也称命名空间
  7. 用python读取股票价格_Python读取文件并给出股票价格
  8. 使用kibana客户端工具操作ElasticSearch(增删改查一)
  9. 证明randomized quicksort的平均running time为nlgn 的数学过程
  10. erp系统是什么转型
  11. r语言t检验输出检验统计量_如何进行统计分析
  12. 九江职业技术学院工业机器人_黑龙江农业工程职业学院学子喜获工业机器人大赛一等奖...
  13. 地推话术 地推活动策划方案 活动策划方案案例 分享经济活动策划方案
  14. TOGAF ADM指导
  15. 《哔哩哔哩助手》助你快速成为B站老司机
  16. 如何查看自己网站的访问量
  17. 华为云鲲鹏云服务介绍
  18. 微信小程序重新发起请求加载页面
  19. win10下安装deepin双系统的坑:安装完成一直黑屏进不去系统
  20. 22.11.3打卡 HDU-1069

热门文章

  1. vue+elementUi——实现后台管理系统的布局(sideBar+header+appMain)
  2. Mac大小写切换,中英文切换
  3. linux下这输入法切换大小写,Life With Arch:让Capslock成为输入法切换快捷键
  4. Hadoop原理简介
  5. python对文本的处理_Python 基础 - 对文本的处理
  6. ce修改手游服务器的数据,CE修改器修改游戏数据的方法
  7. android studio systrace,android – Systrace输出错误
  8. 众为兴SCARA四轴机械臂编程(一)——基于ModbusTCP协议
  9. 数据库增加字段注意事项
  10. 想在原有的基础上,再次添加一些阿里图标的进坑