完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
按照传统IAP的设计方法,一个boot,一个APP,在升级的时候如果断电了整个产品的程序部分就挂了,在内部flash足够的情况下,我能不能做两个APP,相互之间切换升级。比喻说,这次运行APP1,升级就是写APP2,升级完运行APP2,再升级就是写APP1,升级完运行APP1。这样掉电了原来的程序还在,当然防掉电的方法好像还可以先存EEPROM,但是我说的这种方法可不可靠呢?
|
|
相关推荐
10个回答
|
|
試想,開机要如何選擇APP1或APP2,沒有確定不被破壞的區,那程式就有机會跑飛掉
若一定要在APP1和APP2更新,也可,但還是要有開机區,確定跑到好的APP區 即START+APP1+APP2,但APP還要多更新的程式,只會加大程式的flash 參考看看 |
|
|
|
1.在升級時,boot不會掛掉,可重新再升級APP
2.flash足夠,且可重映多個中斷向量下,理論上,可做到boot+APP1+APP2,由boot決定要進入APP1或APP2,由boot決定要升級哪個 |
|
|
|
hy381 发表于 2018-12-13 15:35 这里的boot能不能不要,就是app里面包含了boot部分,app里面既有主程序,又有升级跳转程序(在特定情况下执行,如串口收到特殊帧)。两个app都是这样,相互升级,相互跳转 |
|
|
|
60user179 发表于 2018-12-13 15:52 如果没有 boot,上电后,MCU一般从 0 地址开始取指运行。 怎么来确保处于低段地址的那个 APP 不会出错呢? 必须保证有一段代码是安全的、可运行的,不会在升级的过程中被破坏的。 那这段代码,不就是 boot 了吗? |
|
|
|
hy381 发表于 2018-12-13 15:22 本帖最后由 NapoleonWang 于 2017-11-16 16:17 编辑 大概理解,现在另外一个问题,如果两个app,我要keil生成bin文件的时候,要怎么设置rom的起始地址呢?毕竟对用户来说不知道现在是要升级app1还是app2@atm8686@chuan199 |
|
1 条评论
|
|
小弟我沒用過二個APP
我的認知,用戶更新的軟件就要給他選擇更新哪個區域 rom的起始位置,就看你要分配多大給他,較要注意的應該是中斷向量的設定 不知什麼情況要用到兩個APP,正常情況是一個boot+一個APP,因為boot一定會是活著的,也不需要再更新boot區 |
|
|
|
1 刷FLASH可以用MCU内置的 也可以自己写
STM32上电一般情况是从 0x0800 0000处运行 在这个位置放 APP1程序 APP1功能主要是 校验APP2,成功则执行APP2 否则强制在线升级 开发完APP1后预留好足够的空间 再开发APP2 假如地址是 0X0800 4000 在编译器设好FLASH超始地址为0X08004000 并修改VECT_TAB_OFFSET 为0X4000 开发完成一起烧进去就OK了 |
|
|
|
理论是可以的,但是还需要boot程序,boot用与选择运行的区域。可以在备份寄存器中用一个标志位告诉boot当前需要执行的区域。
|
|
|
|
可以的哦
|
|
|
|
都不难的哦
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2005 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1858 浏览 3 评论
4442 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2007 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2513 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 09:07 , Processed in 1.092049 second(s), Total 104, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号