目前OTA带库升级,写入后需要跳转到IAP,将备份区域的OTA文件拷贝到APP应用程序区,能否在IAP直接跳转到备份区域,达到AB分区的效果?
可以,需要改一改OTA升级标志、跳转地址。量产时注意启用读保护。
OTA升级标志和LD中的跳转地址都改了,写入后,IAP 正确读取到写入的升级标志,但是,跳转到APP失败。startup.s是否也需要修改?如何处理?
跳转前需要代码运行在机器模式。进入机器模式有两种方式,①跳转代码在中断服务函数中执行,代码跑在中断中自动获得机器模式权限;②修改.s文件,整个工程都以机器模式权限运行。
如果用方式②,可以参考下图
跳转前还要注意关闭所有中断使能,包括总中断使能、各个中断单独的使能都要关闭。
IAP 和APP使用的是 例程中的?BackupUpgrade_IAP 和?BackupUpgrade_OTA 修改。
烧录 IAP和 APP_A,功能正常,通过蓝牙升级将APP_B写入,跳转失败。
IAP跳转地址?0x0003A000,APP_B 地址?FLASH (rx) : ORIGIN = 0x0003A000, LENGTH = 216K,可以启动,但是蓝牙功能异常,手机APP无法搜索到蓝牙。
IAP跳转地址?0x00004000,APP_B 地址?FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 216K,功能正常
上面的问题是否和蓝牙库的地址有关?
IAP:0x0000 0000 ~ 0x0000 3FFF
APP_A:0x0000 4000 ~ 0x0003 9FFF
APP_B:0x0003 A000 ~ 0x0006 FFFF
蓝牙库地址与 APP_B 有重叠导致被覆盖,所以造成启动后蓝牙功能异常?