使用ecall触发中断,中断返回后还是执行ecall指令,导致ecall中断不断被触发!
/** 中断处理函数 */
void Ecall_M_Mode_Handler(void) __attribute__((interrupt("machine")));
void Ecall_U_Mode_Handler(void) __attribute__((interrupt("machine")));
void Ecall_M_Mode_Handler(void)
{
;
}
void Ecall_U_Mode_Handler(void)
{
;
}

/** main函数 */
int main(void)
{
asm("ecall\n");
while(1);
}

上面的代码在触发中断后,

会返回到main函数,再执行一遍 ecall指令,导致不断触发ecall中断!


您好,如果异常由ecall或ebreak产生,由于mepc的值被更新为ecall或ebreak指令自己的PC。因此在异常返回时,如果直接使用mepc保存的PC值作为返回地址,则会再次跳回ecall或者ebreak指令,从而造成死循环(执行ecall或ebreak指令导致重新进入异常)。


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