以下代碼是在通過MSR工具生成默認(rèn)工程后添加進(jìn)加去的,沒有改動其它內(nèi)容。
在CH32V307RCT6 和 CH32V203C8T6 兩個芯片下試驗(yàn)。
在main.c中:
? ??//進(jìn)User1區(qū)跳轉(zhuǎn)到 0x5000;
? ??printf("Jump to APP\r\n");? -- 已打印
? ? NVIC_EnableIRQ(Software_IRQn);
? ? printf("Jumped1\r\n");? -- 已打印
? ? NVIC_SetPendingIRQ(Software_IRQn);
? ? printf("Jumped2\r\n");? -- 沒有打印
? ? //保持運(yùn)行中
? ? while(1);
在ch32v30x_it.c中:
void SW_handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void SW_handler(void)
{
? ? printf("start APP");?--?沒有打印
? ? __asm("li? a6, 0x5000");
? ? __asm("jr? a6");
? ? while(1);
}
編譯燒進(jìn)芯片后,通過調(diào)試口,只能看到以下輸出
[2023-08-14 22:37:28.450]# RECV ASCII>
SystemClk:96000000
ChipID:30710518
upToVer:E339E339
Jump to APP
Jumped1
疑問1:為什么 Jump2 沒有打印出來??NVIC_SetPendingIRQ() 屬于阻塞式運(yùn)行的?
疑問2:為什么?SW_handler()沒有被調(diào)用?(start APP 沒有打印出來)
或還是需要配置什么地方才可以?對比官方IAP的樣例,一直沒有找到有什么特殊設(shè)置的地方。