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

问题描述 投票:0回答:1

以下是我在 FE310 Si Five-Hi Five1-Rev B 板上的陷阱例程。

my_trap_routine:

    // read mcause
    csrr t0, mcause;

    // read mepc
    csrr t1, mepc;

mret;

现在,我生成了一个加载访问错误异常,并且执行跳转到了陷阱例程内。现在如何清除处理程序内的异常,以便它不会一次又一次地跳入陷阱例程?

exception riscv riscv32
1个回答
2
投票

更多的是如何处理/忽略异常以及在哪里恢复异常程序,而不是清除异常。

理想情况下,您将模拟例外指令,然后恢复程序,当然假设这是有意义的。

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

这在 RISC V 中相当简单,除非使用压缩指令集,在这种情况下,您必须解码异常指令以确定 PC 前进多远。

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

© www.soinside.com 2019 - 2024. All rights reserved.