如何在risc-v中清除处理程序中的异常



以下是我在FE310 Siive-Hifive1-Rev B板中的陷阱例程。

my_trap_routine:
// read mcause
csrr t0, mcause;
// read mepc
csrr t1, mepc;
mret;

现在,我生成了一个加载访问故障异常,执行跳转到陷阱例程中。现在,如何清除处理程序中的异常,使其不会一次又一次地跳到陷阱例程中?

您必须推进异常程序计数器,以便返回到用户/中断代码中的下一条指令。

这在RISC V中相当简单,除非使用压缩指令集,在这种情况下,您必须解码例外指令,以确定PC的前进距离。

幸运的是,这是一个非常简单的解码,但您需要注意RISC V允许以2字节为增量的不同指令长度。

最新更新