完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
背景介绍
实现方式 分区划分 将整个flash分区化为为 参数区:存储升级过程状态标志位,升级信息,其他升级参数等 boot区:存放BootLoader程序 app区:存放app程序 app备份区:存放app程序的备份 修改链接脚本 链接脚本的修改方式每个单片机都不一样,这里只是介绍一种通用的升级思路,具体修改方法自行百度 硬件相关驱动代码的实现 根据具体的单片机实现以下相关代码 flash读写 复位:可以操作软件复位寄存器,也可以开启看门狗故意饿死狗实现复位 程序跳转:可以参考汇编中跳转到main的代码实现,或者使用C语言函数指针强制跳转 固件接收:一般是一种通讯接口,实现把固件接收下载,如串口、spi、网络等相关通讯接口 升级逻辑实现(重点) 通过上位机或其他CPU或者网络像app程序 为了BootLoader稳定可靠,采用以下逻辑实现 App程序中的操作: App程序在空闲任务中将BootLoader参数区第一个字节(以下简称标志)清除,即置0,当收到opencpu发送的升级请求后,执行app程序备份操作,首先校验app分区和备份分区的md5值,如果不一致,将app主分区的应用程序完整的拷贝到备份区,之后将标志位设置为1,请求复位。 BootLoader程序操作: BootLoader程序启动后判断参数时候为0,如果为零说明不需要升级,直接跳转到app主分区执行程序,为1则证明需要升级,执行相关的初始化操作同时将标志位设置为2开始执行升级程序,接收到的app二进制程序直接写入app主分区flash中,接收完毕后进行校验,若md5校验成功将标志位设置为3,表示尝试跳转到主分区执行,当BootLoader检测到标志位为3时,将标志位设置为2,尝试跳转到主分区执行,若执行成功,app程序会在空闲时间将标志位清除,若执行失败,引发看门狗复位后,BootLoader将检测到标志位2,开始异常处理,执行回滚操作,将备份分区的程序拷贝到主分区继续执行。 BootLoader逻辑状态转换表如下图所示 |
|
|
|
只有小组成员才能发言,加入小组>>
2497 浏览 0 评论
1060浏览 2评论
679浏览 1评论
441浏览 0评论
175浏览 0评论
293浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:24 , Processed in 1.106681 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号