当前位置: 首页 > news >正文

充电宝网站建设策划书济宁商城网站开发设计

充电宝网站建设策划书,济宁商城网站开发设计,布吉网站建设哪家好,asp网站开发四酷全书这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能, 主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中,必…

        这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能,

        主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。

1、开发环境

Keil+stm32f103+JLINK

2、程序思路

        在升级中,必须要考虑的问题就是:升级成功以及失败,然后失败的补救措施。所以我以前的写法是最简单粗暴的

2.1、IAP升级旧版本

bootloader有两个功能,由标志位控制,

        一个是跳转到app程序(一般升级后进入)

        一个是允许升级程序(一般升级失败或者初始状态)

bootloader根据标志位判断当前是升级还是跳转,如果程序处于app则先更新标记位表示进入升级,然后复位,进入bootloader

这个优点就是代码简单,空间利用率高,如果程序很大的话比较适合,但是如果空间使用不大那么可以使用双缓存,毕竟可以在出错之后回滚。

2.2、IAP升级双缓存版本

我使用的单片机内部flash大小为512kb,所以我按照128kb可以划分为5个区域

  1. bootloader大小为64kb,假设地址为0x80000000-0x80010000
  2. 运行区域大小为128kb,主要此地址固定代码中断向量表偏移量,假设地址为0x80010000-0x80030000
  3. 升级数据存储1大小为128kb,假设地址为0x80030000-0x80050000
  4. 升级数据存储2大小为128kb,假设地址为0x80050000-0x80070000
  5. flash数据存储大小为64kb,假设地址为0x80070000-0x80080000

bootloader有两个功能,由标志位控制,

        一个是跳转到app程序

        一个是允许升级程序(一般升级失败或者初始状态)

(1)、其中app程序中,例如当前数据存储1已经存在了运行成功的数据,说明此时运行区域和数据存储1的数据相同,那么这就相当于一个备份,此后升级数据将使用存储2地址。反之亦然。

(2)、然后bootloader的跳转前会判断是否是升级过的,如果升级过,那么将会比如升级数据存储1,那么需要将存储1的数据拷贝到运行区域,然后再跳转,就是将0x80030000-0x80050000的数据复制到0x80010000-0x80030000。反之存储2亦然

(3)、如果不需要复制数据的话就直接跳转,跳转前会将指定标志位设置为错误,跳转到app之后,由app端将标志位设置为正常。这样如果跳转失败,重启后就不会跳转,如果是初始情况将不做任何处理,如果是升级出现的异常,将会从备份数据复制到运行区域然后重新跳转运行。例如此前升级完成,但是此时新数据存储在数据存储1位置,老数据存储在数据存储2位置,复制存储1的数据到运行区域,结果启动失败,那么再次启动后将老数据复制到运行区域,重新运行

注意:已经复制过的就不用复制,只复制升级后的那次

2.3、IAP升级双缓存版本的优化

此前尽管这个是有备份,但是其实是属于空间浪费了,为什么需要如果,是因为代码写死了中断向量表便宜0x10000,所以运行区域必须从0x80010000开始,但是如果代码将中断向量表偏移改为动态的,那么则可以节省出一份空间。其中bootloader只是不需要复制内存到运行区域,其他步骤都一样

  1. bootloader大小为64kb,假设地址为0x80000000-0x80010000
  2. 运行区域1大小为192kb,假设地址为0x80010000-0x80040000
  3. 运行区域2大小为192kb,假设地址为0x80040000-0x80070000
  4. flash数据存储大小为64kb,假设地址为0x80070000-0x80080000

此时,运行区域1的中断向量偏移应该设置为0x80010000,运行区域2的中断向量偏移应该设置为0x80040000。

具体操作如下:

因为跳转前,是由bootloader决定跳转到那个区域的,所以我们只需要将app的开头改为读取当前启动是什么区域,然后根据区域直接更改中断向量偏移的地址即可。

    if(flag == block2){SCB->VTOR = FLASH_BASE | 0x40000;}else{SCB->VTOR = FLASH_BASE | 0x10000;}

注意:2.3未验证,但是逻辑上是不会错的

注意:我的bootloader所有行为都是由上位机控制,上位机发送跳转/准备升级/接收数据/升级完成/复位等一系列命令

http://www.15wanjia.com/news/189021.html

相关文章:

  • 汉中网站建设哪家好wordpress后台 502
  • 手机网站活动策划方案昆明网站设计方案
  • 网站手机版绑定域名wordpress 当前分类文章数
  • 做gif动图的网站犯法吗设计招聘网站
  • 2019网站建设网站源代码上传都需要怎么做
  • 北京网站建设佳v询 lotlek 能上词公司建站系统
  • 标准型网站构建陕西省建设网企业信息
  • 北京acc网站建设品牌推广建议
  • 给网站开发自己的一封信标准分辨率是
  • 网站建设创意文案网站建设费用的请示
  • 常用网站开发模式wordpress 书站
  • 北京大型商场一览表上海网站建设seo
  • 山东食品行业网站模板国内最新新闻事件今天
  • 注销网站备案申请表网站功能设计的内容
  • cms企业网站模板页面设计软件有哪些
  • 查看网站后台登陆地址网站 运营
  • 微信登录 网站开发合作网站开发
  • 定制手机网站开发wordpress不显示评论框
  • 从化电子商务网站建设无锡网站设计系统
  • 建设专业网站的价格网页特效素材
  • 网站开发项目运营经理岗位职责自己建设网站用哪个
  • 网站开发技术实验总结wordpress重装后404
  • 自动刷网站关键字排行新建设电影院+网站
  • 做相同网站违法吗中装建设集团有限公司股票
  • 营销手机网站公司网站制作步骤
  • 电脑软件下载网站新加坡网站后缀
  • 网站名称大全营销网络广告
  • 西安网络技术有限公司网站什么购物网站是正品而且便宜
  • 王也微信头像超级优化空间
  • 做网站必须要加v吗容桂手机网站建设