例程中的跳轉(zhuǎn)地址是0x00005000,在ld文件中,IAP的起始地址是0x08000000,APP的起始地址是0x08005000,實(shí)現(xiàn)跳轉(zhuǎn)的函數(shù)在中斷SW_Handler()中如下:
void SW_Handler(void) {
? ? __asm("li? a6, 0x5000");
? ? __asm("jr? a6");
? ? while(1);
}
這應(yīng)該是個(gè)匯編語言,將0x5000寫入一個(gè)寄存器,然后執(zhí)行jr跳轉(zhuǎn)指令。
例程能夠正常運(yùn)行,并跳轉(zhuǎn)到0x8005000執(zhí)行APP程序,現(xiàn)在因?yàn)楣こ绦枨?,IAP程序的大小可能會(huì)比較大,0x5000也就是20k的空間可能不足,所以我想增加其空間大小,所以修改APP起始地址為0x08010000,對(duì)應(yīng)的APP的ld文件我也進(jìn)行了修改如下:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 44K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}
IAP內(nèi)的修改如下:
MEMORY
{??
/* CH32V20x_D6 - CH32V203F6-CH32V203G6-CH32V203K6-CH32V203C6 */
/*
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K? ? ?//32k
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 10K
*/?
中斷
void SW_Handler(void) {
? ? __asm("li? a6, 0x10000");
? ? __asm("jr? a6");
? ? while(1);
}
修改編譯后,程序只能運(yùn)行到IAP程序,無法實(shí)現(xiàn)跳轉(zhuǎn)到APP程序所在的地址。目前不知道問題出在哪里,還請(qǐng)吧友們指教。
ps:ld文件內(nèi)的LENGTH應(yīng)該只是一個(gè)后續(xù)大小的值,我直接按64k寫了,64k和例程的20k都試過,好像對(duì)跳轉(zhuǎn)到0x08010000這個(gè)地址來說沒啥區(qū)別。。