请问在做IAP时,为什么 SW_handler() 没有被调用?


以下代码是在通过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的样例,一直没有找到有什么特殊设置的地方。

您好,已邮件回复你,中断函数名称有误,按照下图修改一下即可,此外打印加上换行符,注意中断声明函数名称也要修改。

image.png


非常感谢!问题解决了!


只有登录才能回复,可以选择微信账号登录