以下是我在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字节为增量的不同指令长度。