硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2017|回复: 5
收起左侧

STM32两个APP交互升级的问题

[复制链接]

98

主题

356

回帖

650

积分

金牌会员

积分
650
发表于 2018-6-2 14:14:30 | 显示全部楼层 |阅读模式
程序空间包含Bootloder,APP1,APP2;
运行APP1时,新程序下载到APP2空间,然后置位标志重启后Bootloder直接跳转到APP2空间运行;
运行APP2时,新程序下载到APP1空间,然后置位标志重启后Bootloder直接跳转到APP1空间运行;
两个程序就这样交互升级运行。
那么问题来了,KEIL在生成BIN文件的时候该程序的位置就已经确定了,但现场不知道当前运行的哪个程序,该如何有效解决这个问题呢?
比较了一下keil在ROM1地址不同时生成的两个BIN文件,不止一开始有不同,中间好想也有一些不同的地方。
回复

使用道具 举报

98

主题

356

回帖

650

积分

金牌会员

积分
650
 楼主| 发表于 2018-6-2 14:24:35 | 显示全部楼层
http://www.stmcu.org/module/forum/thread-611738-1-1.html
回复

使用道具 举报

98

主题

356

回帖

650

积分

金牌会员

积分
650
 楼主| 发表于 2018-6-2 14:24:49 | 显示全部楼层
跟这个帖子意思一样
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115666
QQ
发表于 2018-6-2 17:39:08 | 显示全部楼层
你的这两个程序运行时效果是一样的吗,有没有可以进行区分的状态,比如LED等。

回复

使用道具 举报

98

主题

356

回帖

650

积分

金牌会员

积分
650
 楼主| 发表于 2018-6-14 23:07:30 | 显示全部楼层
eric2013 发表于 2018-6-2 17:39
你的这两个程序运行时效果是一样的吗,有没有可以进行区分的状态,比如LED等。

两个程序功能是一样的,只是程序版本不同,想法是这样的:
FLASH分为BOOT区,程序A区,程序B区;
某一个时刻只可能运行BOOT+A区程序或BOOT+B区程序
运行A区程序时,升级程序通过串口或其它接口存放到程序B区中,然后置位一个标志位,复位后在Bootloder中根据这个标志位运行B区程序
运行B区程序时,升级程序通过串口或其它接口存放到程序A区中,然后置位一个标志位,复位后在Bootloder中根据这个标志位运行A区程序
按照以上顺序往复循环
那么问题来了,编译器在生成bin文件的时候,这段代码的地址其实就已经定死了,如果在KEIL配置中程序空间在A区,那么生成的BIN文件存放到B区显然是不能运行的。。。。。
敲到这儿越来越感觉实现起来好难了。。。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115666
QQ
发表于 2018-6-15 16:46:40 | 显示全部楼层
如果你的产品硬件没有一个有效的区分状态,那就自己做一个升级软件吧,这样就可以有效区分了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-10 12:06 , Processed in 0.240180 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表