MCU程序布局----优化升级方式
需求:设备通过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程序布局----优化升级方式相关推荐
- audio 小程序 放大_微信小程序搜索优化指南
微信在2019年重点对搜索进行了升级,开放了小程序基于页面的搜索,搜索将不再局限于搜索具体的某一个小程序名称,"小程序名称"的优势已经下落神坛.目前搜索是当下小程序唯一的自然流量来 ...
- 深入探索Android布局优化(上)
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. Android的绘制优化其实可以分为两个部分,即布局(UI)优化和卡顿优化,而布局优化的核心 ...
- 百度智能小程序搜索优化指南(基础版)
目录 一.为什么百度搜索喜欢智能小程序 二.开发前必读内容 2.1 必须了解的搜索知识 2.2 掌握常用工具 2.3 如何搭建智能小程序更友好 三.智能小程序资源如何进入搜索 3.1 接入自然搜索结 ...
- app架构图,写给Android开发的小程序布局指南,讲的明明白白!
前言 最近我一直在面试高级工程师,不管初级,高级,程序员,我想面试前,大家刷题一定是是少不了吧. 我也一样,我在网上找了很多面试题来看,最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性 ...
- android布局优化方案,Android启动优化-布局优化
Android启动优化-布局优化 安卓应用开发发展到今天,已经成为一个非常成熟的技术方向,从目前的情况看,安卓开发还是一个热火朝天的发展,但高级人才却相对较少,如今移动互联网的开发者也逐渐开始注重插入 ...
- Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存 ...
- android包内存放视频,Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向.原因 & 具体优化 ...
- Android布局加载慢,Android布局优化(四)X2C — 提升布局加载速度200%
系列文章 前言 在Android布局优化(一)从布局加载原理说起中我们说到了布局加载的两大性能瓶颈,通过IO操作将XML加载到内存中并进行解析和通过反射创建View.这里介绍一种避免运行时通过IO操作 ...
- Android系统性能优化(69)---含内存优化、布局优化
Android性能优化:含内存优化.布局优化 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优 ...
- Android系统性能优化(59)----代码、图片和布局优化
Android优化系列--代码.图片和布局优化 这篇文章分为三个部分代码优化.图片优化.布局优化,尽量每个方法都写了小的Demo! 代码优化:不要做多余的工作,尽量避免次数过多的内存的分配,(需要对a ...
最新文章
- 用 Python 制作酷炫的可视化大屏,特简单!
- 生存分析-从survdiff函数中提取P值
- 谷歌TPU训练BERT只要23秒,华为AI芯片达国际领先水平,MLPerf v0.7出炉
- MySQL5.6 主从复制配置
- 把Python的200个标准库分类整理了下,供参考
- flex 3名域namespace的使用有的也称命名空间
- 用python读取股票价格_Python读取文件并给出股票价格
- 使用kibana客户端工具操作ElasticSearch(增删改查一)
- 证明randomized quicksort的平均running time为nlgn 的数学过程
- erp系统是什么转型
- r语言t检验输出检验统计量_如何进行统计分析
- 九江职业技术学院工业机器人_黑龙江农业工程职业学院学子喜获工业机器人大赛一等奖...
- 地推话术 地推活动策划方案 活动策划方案案例 分享经济活动策划方案
- TOGAF ADM指导
- 《哔哩哔哩助手》助你快速成为B站老司机
- 如何查看自己网站的访问量
- 华为云鲲鹏云服务介绍
- 微信小程序重新发起请求加载页面
- win10下安装deepin双系统的坑:安装完成一直黑屏进不去系统
- 22.11.3打卡 HDU-1069
热门文章
- vue+elementUi——实现后台管理系统的布局(sideBar+header+appMain)
- Mac大小写切换,中英文切换
- linux下这输入法切换大小写,Life With Arch:让Capslock成为输入法切换快捷键
- Hadoop原理简介
- python对文本的处理_Python 基础 - 对文本的处理
- ce修改手游服务器的数据,CE修改器修改游戏数据的方法
- android studio systrace,android – Systrace输出错误
- 众为兴SCARA四轴机械臂编程(一)——基于ModbusTCP协议
- 数据库增加字段注意事项
- 想在原有的基础上,再次添加一些阿里图标的进坑