307 IAP方案疑問

我的分區(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)



您好,若你是不進(jìn)中斷跳轉(zhuǎn),直接在函數(shù)中調(diào)用兩個指令進(jìn)行跳轉(zhuǎn)的話,建議你將IAP工程啟動文件中mstatus寄存器的值按照下圖修改一下再測試一下,應(yīng)該沒問題,應(yīng)該和網(wǎng)絡(luò)庫無關(guān),你可以試一下,后續(xù)若有問題,可通過郵箱(lzs@wch.cn)和我溝通。

image.png



這個能直接跳嗎?看例子是通過中斷實(shí)現(xiàn)的


您好,可以不通過中斷直接跳轉(zhuǎn),注意不通過中斷跳轉(zhuǎn)時要配置在機(jī)器模式下 ,要修改工程啟動文件中mstatus寄存器的值,可以修改成0x7888,如下圖

image.png



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频