加盟型网站制作,宁夏网站建设优化,广西梧州发现1例阳性人员,安徽平台网站建设费用文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half#xff08;硬件完成#xff09;trap的bottom half#xff08;软件完成#xff09;从trap返回代码实现 流
控制流#xff1a;程序控制的执行流 trap分为中断和异常
mtvec
base#xff1a;存储trap入… 文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half硬件完成trap的bottom half软件完成从trap返回代码实现 流
控制流程序控制的执行流 trap分为中断和异常
mtvec
base存储trap入口函数的基地址右移两位的即四字节对齐的地址 WARL:可以写任何值但读出来的值需要是合法才行
mepc
异常执行完后恢复到原来执行流 MXLEN就是CPU处理长度
mcause
WLRL读写该部分都必须是合法值 mtval
对mcause做的一个补充 在RISC-V架构中mtval 是 Machine Trap Value 寄存器机器陷阱值寄存器的缩写它是RISC-V架构定义的一部分用于异常处理机制。
当发生硬件引发的异常如load访问错误、store访问错误、非法指令等时mtval 寄存器会被设置为相关的错误值。具体来说
对于 load 或 AMO (原子操作) 访问错误mtval 保存的是导致错误的地址。对于 store 访问错误mtval 同样保存的是试图进行非法存储操作的地址。对于指令相关异常如非法指令mtval 存储的是触发异常的指令的地址。
程序员或操作系统可以通过检查 mtval 寄存器的内容来确定导致异常的具体原因这对于调试和异常处理程序非常重要。在RISC-V架构的特权模式下不同的异常等级如Machine、Supervisor、User等会有对应的陷阱值寄存器例如在Supervisor模式下类似的寄存器可能是scause和sbadaddr。
mstatus
xPIE保持执行trap时前保持当前的xIEtrap执行后再恢复到xIE去 xPP保持陷入当前权限x之前的权限级别值陷入到M权限之前的权限可以说M U S 所以用两个比特位表示这三种状态。陷入到S之前的权限可以是 U S 所以用一个比特位表示陷入到U只能是U那没有必要保存因为执行完trap后恢复到的和执行trap时一样。 WPRI读这个寄存器的时候忽略该部分的值写这个寄存器的时候要保留该部分原来的值不要变
trap 初始化
设置mtvec地址为自己设置的异常处理程序的入口地址
在RISC-V架构中mtvec 是 Machine Trap Vector Base Address Register机器陷阱向量基地址寄存器的缩写。此寄存器在RISC-V处理器中扮演着核心的角色它负责决定在发生硬件异常或中断时处理器应跳转到何处执行相应的处理代码。
mtvec 寄存器的结构通常包括两部分 Base Address基地址存储了一个物理地址当发生异常或中断时处理器会跳转到这个地址处执行异常处理程序的第一条指令。 Mode模式 Direct Mode直接模式在这种模式下基地址字段直接指向异常处理程序的入口地址。Vectored Mode向量化模式这种模式下基地址字段指向一个固定的向量表向量表中的每一个条目对应一种特定的异常类型。当异常发生时处理器根据异常类型从向量表中索引出相应的处理程序地址。 trap的top half硬件完成
MIE复制到MPIE中MIE清0设置mepcpc设置为mtvec异常异常程序处理完后需要重新执行异常指令 中断执行完处理中断执行下一条指令设置mcause和mtval设置MPP权限进入M无论啥trap都会先切换到machine模型 .
trap的bottom half软件完成
切换上下文调用对应的处理函数恢复上下文mret
从trap返回
恢复权限中断恢复设置MPPpc恢复设置MPIE
代码实现
https://github.com/FULLK/risllkos/tree/main/Fullkenerl5