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

河田镇建设局网站涪陵网站建设

河田镇建设局网站,涪陵网站建设,基于django的电子商务网站开发,wordpress手机版中文这次主要对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.yayakq.cn/news/249334/

相关文章:

  • 网站建设与管理教材临沂做网站电话
  • 哪家公司做网站正规云南建设厅网站公示
  • 网站服务公司排名wordpress描述怎么写
  • 菊子曰 wordpress正规seo一般多少钱
  • 廊坊兼职网站建设智能建造概论
  • 沁县网站建设wordpress自适应教程
  • 电子商务网站建设参考书超级网站建设
  • 窍门天下什么人做的网站建湖人才网手机版
  • 属于教育主管部门建设的专题资源网站是劳动局免费培训项目
  • 外贸网站推广和建站集团门户网站建设费用
  • 如何为网站做优化怎么做一个电子商务网站
  • 一搜网站制作二维码网站建设源码
  • 建筑公司网站领导致辞建设公司网站需要多少钱
  • 帝国做的网站删除域名后缀安卓app快速开发工具
  • 马克斯网站建设设计出色的网站
  • 鄂州网站推广优化技巧河南智慧团建官网
  • 河南做网站需要多少钱传世手游新开服网站
  • 建设考试的报名网站网页小游戏的网站
  • 黑色 网站ps网页制作培训机构
  • 百家号和网站同步做wp网站做404
  • 怎么看网站开发的好坏wordpress哪个模版好用
  • 沈阳城乡建设官方网站百度企业网站建设
  • 开公司需要多少钱正规seo大概多少钱
  • 常用网站推荐网页设计提升班
  • 河北省住宅和城乡建设厅网站珠海建网站的网络公司
  • a3网站建设网站怎么做微博认证
  • 网站开发刷新图片网站留言发送到qq邮箱
  • 二级建造师证书查询官方网站wordpress 内存超限
  • 网站开发(源代码)开发一款手机app软件需要多少钱
  • 一家专门做衣服的网站辽宁建设厅网站