以下代码是在通过MSR工具生成默认工程后添加进加去的,没有改动其它内容。
在CH32V307RCT6 和 CH32V203C8T6 两个芯片下试验。
在main.c中:
//进User1区跳转到 0x5000;
printf("Jump to APP\r\n"); -- 已打印
NVIC_EnableIRQ(Software_IRQn);
printf("Jumped1\r\n"); -- 已打印
NVIC_SetPendingIRQ(Software_IRQn);
printf("Jumped2\r\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);
}
编译烧进芯片后,通过调试口,只能看到以下输出
[2023-08-14 22:37:28.450]# RECV ASCII>
SystemClk:96000000
ChipID:30710518
upToVer:E339E339
Jump to APP
Jumped1
疑问1:为什么 Jump2 没有打印出来? NVIC_SetPendingIRQ() 属于阻塞式运行的?
疑问2:为什么 SW_handler()没有被调用?(start APP 没有打印出来)
或还是需要配置什么地方才可以?对比官方IAP的样例,一直没有找到有什么特殊设置的地方。