我现在使用IAP升级,升级方式是一个IAP程序+2个APP程序+标志位,开始使用JLINK下载IAP程序,IAP下载APP1,然后每次启动根据标志启动APP1或者APP2;和面APP1和APP2都可以升级对方,只有一个APP在运行都可以升级另外一个APP程序,现在的问提是APP1(或者APP2)升级完APP2(或者APP1)后STM32必须重启一下,不然运行一点时间当前的APP后死掉,不知道哪位遇见过这样的情况,当前APP不升级另外一个APP就好好的运行,只有当前APP升级另一个APP后,过一段时间就会死掉,也不知道死在那个地方,APP都升级成功了。。。。。 |
如当前运行app1,要升级app2,并运行,应该在app1中,改写标志,然后复位跳转到iap程序中,通过iap升级app2 ,升级成功后,改写标志,映射app2 的中断向量到sram,然后跳转app2 执行。反之也一样。我们目前产品就是这么做,一直很稳定!
备用学习
APP BOOTLAODER 先运行,然后判断标志位是要执行哪个区域的代码。再JAMP到指定的入口地址。