2019-07-20 23:24发布
augustedward 发表于 2018-3-14 19:57 我做过这方面的,思路很简单的,bootloader接收到升级程序时,把程序直接写到备份区,然后当全部写完校验后 ...
最多设置5个标签!
最低地址的
1号区域放bootloader程序 的地址区间
2号区域flash放一个存放操作标志数的区间
3号区域app1的地址区间
4号区域app2的地址区间
每回主控上电或者复位
先去读取2号区域的数值
假设如果区域2 的 flash的标志数读回来是
1跳转运行3号区域app1的程序 运行app1的时候如果检测到升级操作指示
写2号区域flash标志数4 软后软件复位单片机
没有升级指示 正常运行app1
2跳转运行4号区域app2的程序
运行app2的时候如果检测到升级操作指示
写2号区域flash标志数3 软后软件复位单片机
没有升级指示 正常运行app2
3执行bootloader升级app1区域
刷写完程序以后并校验该程序区域
如果校验正确 写区域2flash的标志数为 1 软后软件复位单片机
如果校验错误 写区域2flash的标志数为 2 软后软件复位单片机
4执行bootloader升级app2区域
刷写完程序以后并校验该程序区域
如果校验正确 写区域2flash的标志数为 2 软后软件复位单片机
如果校验错误 写区域2flash的标志数为 1 软后软件复位单片机
以上就是我的升级思路
但是这里要考虑到程序运行错误的情况 就是硬件错误 跑飞
我都会在有可能出现错误时掉进的while里
写一段软件复位程序
这段错误处理程序可以这么写
先读取 区域2flash的标志数
看看现在运行出错的app是哪个区域的
如果是区域3的app1那么就把区域2的flash标志数写为2 然后软件复位 这样复位以后运行的就是app2了
如果是区域4的app2那么就把区域2的flash标志数写为1 然后软件复位 这样复位以后运行的就是app1了
我现在也想这样做,我试一下
一周热门 更多>