1. ebreak指令,这是一条用于在RISC-V程序中设置断点的特殊指令。当处理器执行到ebreak指令时,它会生成一个断点异常,暂停程序的执行。在调试器或监视器中,可以利用这个异常来实现断点功能,例如在断点处停止程序执行并进入调试模式。 2. csrrc指令,RISC-V架构中的控制和状态寄存器(csrs)可以用于调试目的。csrrc指...
RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。 中断号保存在mcause寄存器中,最高位是 1 说明是同步异常,否则是中断 mepc储存中断前执行指令的地址,调用mret返回后会执行其中的地址 对于RISCV而言,当前运行的状态保存在mstatus寄存器...
(mret 指令,回到 mepc 中的指令继续执行,并从机器模式返回异常发生时的处理器模式) 以ebreak 指令为例。 当ebreak 执行时,将会触发 BREAKPOINT 的异常。通常情况下,该异常与 debug 相关。在此处只用于举例异常发生过程。 Main:….0x80000100addix1, x1,10x80000104ebreak0x80000108addix2, x2,2…. 当处理...
通常情况下,最简单的异常处理是跳过异常发生的指令,只需要在异常处理中将 mepc +=4,然后再 mret ,处理器就会跳过 (0x80000104 ebreak)指令,执行(0x80000108 addi x2, x2, 2)指令。 mtval Machine Trap Value Register (mtval)机器模式异常值寄存器。当异常发生时,该 寄存器将被写入异常的信息,用于辅助处理...
主动的让其进入异常处理函数,常见的是系统调用syscall。而在riscv上为ecall或者进入断点的ebreak。 外部中断(Interrupt) 一般由外部事件触发,比如定时器中断、GPIO中断等。这些异常是不可预知的。 对于一般的中断处理流程,进入中断后需要进行上下文的保存与恢复。
RISC-V 定义的同步异常具有优先级顺序,当单个指令同时发生多个异常时,可能需要考虑优先级顺序。下表描述了同步异常优先级顺序。 数据地址断点(watchpoints)、指令地址断点、环境断点异常(EBREAK)都具有相同的异常码(3),但优先级不同,如上表所示。 指令地址未对齐异常 (0x0) 的优先级低于其他指令地址异常,因为它们...
riscv 中断处理 中断(中断返回)本质上也是一种跳转,只不过还需要附加一些读写CSR寄存器的操作。 RISC-V中断分为两种类型,一种是同步中断,即ECALL、EBREAK等指令所产生的中断,另一种是异步中断,即GPIO、UART等外设产生的中断。 中断号保存在mcause寄存器中,最高位是 1 说明是同步异常,否则是中断...
3)16 位软件断点指令(C.EBREAK) C Extension 中也为 16 位压缩指令集定义了对应的软件断点指令,其机器代码 为 16'h9002。 6. 函数调用的开场白和收场白 在讨论函数调用约定时,曾经提到通用寄存器 x5 既可以作为临时寄存器(t0), 又可以作为替代链接寄存器(见表1)。
3)16 位软件断点指令(C.EBREAK) C Extension 中也为 16 位压缩指令集定义了对应的软件断点指令,其机器代码 为 16'h9002。 6. 函数调用的开场白和收场白 在讨论函数调用约定时,曾经提到通用寄存器 x5 既可以作为临时寄存器(t0), 又可以作为替代链接寄存器(见表1)。
(4)RISC-V RV32 I 基础 ISA RV32I base ISA 只有 40 条 Unique InstrucTIons,但简单的硬件实现只需要 38 条指令。RV32I指令可分为: R-Type:注册到注册说明 I-Type:立即注册、加载、JLR、Ecall 和 Ebreak S型:商店 B型:分支 J型:跳跃和链接 U 型:立即加载/添加上层 ...