CH32V307的IAP跳轉(zhuǎn)問題
void?SW_Handler(void)
{
??typedef?void?(*jump_func_t)(void);
??jump_func_t?jmp?=?(jump_func_t)FLASH_AREA_BLD_SIZE;//FLASH_AREA_APP_SADDR
??jmp();
??
}

論壇已經(jīng)搜索過IAP相關帖子,也有搜索到相關例程。

上述代碼,F(xiàn)LASH_AREA_BLD_SIZE是0x8000,F(xiàn)LASH_AREA_APP_SADDR是0x08000000+FLASH_AREA_BLD_SIZE。

如果用FLASH_AREA_BLD_SIZE是可以跳轉(zhuǎn)成功的,但是FLASH_AREA_APP_SADDR就無法成功跳轉(zhuǎn)。這是什么問題?在其他帖子上看到回復,使用絕對地址和映射地址上一樣的。但是實際上就不行。這是什么問題?

如果用FLASH_AREA_APP_SADDR的時候,匯編是這樣的:

???0x2b6?:??lui?????a6,0x8008
???0x2ba?:????????jr??????a6
???0x2bc?:????????j???????0x2bc?


弄出來了,如果要用FLASH的實際地址,app的鏈接文件里面的FLASH也需要使用實際地址鏈接才行。


您好,如果需要用8000000這種去跳轉(zhuǎn),app的ld也要用物理地址,如果用基于0的這種去偏移,app的ld就從0開始,因為程序中會有基于當前pc去計算偏移的操作,如果用了基地址0的ld編譯的程序,采樣基地址800xxxx的跳轉(zhuǎn)執(zhí)行,會導致機器當前pc是基于8000xxxx偏移,但是機器碼確是基于0去偏移的,指令執(zhí)行錯誤是正常的。此外,如果需要 ld 文件中為實際物理地址,需要修改 ld 文件 flash 起始地址為 0x08000000,然后需要在啟動文件最前面增加兩行代碼,如下:
lui t0,0x08000
jr 8(t0)


好的,明白了。謝謝


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

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