我的分区为:
IAP:40k(实际7k,不带libnet库)
APP1:76k(实际56k,带libnet库)
APP2:76k(实际56k,带libnet库)
Link.ld配置为:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 192K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}
芯片频率:SYSCLK_FREQ_144MHz_HSE
测试代码,IAP逻辑相当简单,就是读取APP2ADDR+76k-256处的一个标志,不判断,然后直接利用下面代码跳转
__asm("li? a6, 0xA000");
__asm("jr? a6");
我将IAP代码和APP代码合并成一个bin并下载到芯片,但是未执行APP1代码。
个人感觉是IAP不带libnet库导致的,如果是这个原因,是否可以将IAP放到APP后面,如果放后面,那跳转时需要的地址是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)