目前OTA帶庫升級,寫入后需要跳轉(zhuǎn)到IAP,將備份區(qū)域的OTA文件拷貝到APP應用程序區(qū),能否在IAP直接跳轉(zhuǎn)到備份區(qū)域,達到AB分區(qū)的效果?
可以,需要改一改OTA升級標志、跳轉(zhuǎn)地址。量產(chǎn)時注意啟用讀保護。
OTA升級標志和LD中的跳轉(zhuǎn)地址都改了,寫入后,IAP 正確讀取到寫入的升級標志,但是,跳轉(zhuǎn)到APP失敗。startup.s是否也需要修改?如何處理?
跳轉(zhuǎn)前需要代碼運行在機器模式。進入機器模式有兩種方式,①跳轉(zhuǎn)代碼在中斷服務函數(shù)中執(zhí)行,代碼跑在中斷中自動獲得機器模式權限;②修改.s文件,整個工程都以機器模式權限運行。
如果用方式②,可以參考下圖
跳轉(zhuǎn)前還要注意關閉所有中斷使能,包括總中斷使能、各個中斷單獨的使能都要關閉。
IAP 和APP使用的是 例程中的?BackupUpgrade_IAP 和?BackupUpgrade_OTA 修改。
燒錄 IAP和 APP_A,功能正常,通過藍牙升級將APP_B寫入,跳轉(zhuǎn)失敗。
IAP跳轉(zhuǎn)地址?0x0003A000,APP_B 地址?FLASH (rx) : ORIGIN = 0x0003A000, LENGTH = 216K,可以啟動,但是藍牙功能異常,手機APP無法搜索到藍牙。
IAP跳轉(zhuǎn)地址?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 有重疊導致被覆蓋,所以造成啟動后藍牙功能異常?