我的分區(qū)為:
IAP:40k(實(shí)際7k,不帶libnet庫)
APP1:76k(實(shí)際56k,帶libnet庫)
APP2:76k(實(shí)際56k,帶libnet庫)
Link.ld配置為:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 192K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}
芯片頻率:SYSCLK_FREQ_144MHz_HSE
測試代碼,IAP邏輯相當(dāng)簡單,就是讀取APP2ADDR+76k-256處的一個標(biāo)志,不判斷,然后直接利用下面代碼跳轉(zhuǎn)
__asm("li? a6, 0xA000");
__asm("jr? a6");
我將IAP代碼和APP代碼合并成一個bin并下載到芯片,但是未執(zhí)行APP1代碼。
個人感覺是IAP不帶libnet庫導(dǎo)致的,如果是這個原因,是否可以將IAP放到APP后面,如果放后面,那跳轉(zhuǎn)時需要的地址是0x13000,能跳過去嗎?
合并代碼如下:
IAP_FILE = "../IAP/obj/IAP.bin"
APP_FILE = "../APP/obj/APP.bin"
OUT_FILE = "APP.bin"
with open(IAP_FILE, "rb") as fd:
? ? iap_data = fd.read()
with open(APP_FILE, "rb") as fd:
? ? app_data = fd.read()
with open(OUT_FILE, "wb") as fd:
? ? fd.write(iap_data)
? ? for i in range(int(40*1024) - len(iap_data)):
? ? ? ? fd.write(bytearray([0]))
? ? fd.write(app_data)