RISC-V (六)Trap和Exception

控制流和trap

        控制流(control flow): 只要是程序自己控制的都属于正常的控制流。

        -branch、jump

        异常控制流(exceptional control flow,简称ECP ):不在程序控制范围内。

        -exception

        -interrupt

        RISCV把ECP统称为Trap 

Machine模式下的CSR寄存器

Trap中涉及的寄存器

mtvec(machine trap-vector base-address)
BASE(MXLEN-1:2)(WARL)MODE(WARL)
MXLEN-22

         -WARL:write any values,reads legal values。

        -BASE:trap入口函数的基地址,必须保证四字节对齐。

        -MODE::进一步用于控制入口函数的地址配置方式:

                -Direct:所有的exception和interrupt发生后PC都跳转到BASE指定的地址处。

                -Vectored:exception处理方式同Direct;但interrupt的地址以数组方式排列。

mepc(machine exception program counter )        
mtval
MXLEN-1 : 0

        当trap发生时,pc会被替换为mtvec设定的地址,同时hart会设置mepc为当前指令或下一条指令的地址,当我们需要退出trap时可以调用特殊的mret指令,改指令会将mepc中的值恢复到pc中(实现返回的效果)。

        在处理trap程序中我们可以修改mepc的值达到改变mret返回地址的目的。 

mcause(machine cause)      
InterruptException Code(WLRL)
1MXLEN-1

        当trap发生时,hart会设置该寄存器通知我们发生的原因。

        最高位Interrupt为1时标识了当前的trap为interrupt,否则是exception。

        剩余的Exception code用于标识具体的interrrupt或exception种类。

mtval(machine trap value)        
mepc
MXLEN-1 : 0

        当trap发生时,除了通过mcause可以获取exception的种类code值外,hart还提供了mtval来提供exception的其他信息来辅助我们执行更进一步的操作。

        具体的辅助信息由特定的硬件实现定义,RISC-V规范没有定义具体的值。但规范定义了一些行为。譬如访问地址出错时的地址信息、或者执行非法指令的指令本身等。配合mcause使用。 

mstatus(machine status)     
3130-23222120191817
SDWPRITSRTWTVMMXRSUMMPRV

        -WPRI:Writes Preserve values,reads ignore values

        异常发生时,特权级别总是低级别往高级别跳,所以叫trap。这也就是为什么有MPP和SPP,但是没有UPP的原因。PP是之前的特权级别的意思。如果跳到U级别,则之前必定是U特权级别。 

Trap处理流程

        绿色箭头(top half )是硬件处理的过程,蓝色部分(bottom half  )是软件控制。

        top half发生在cpu内部,不是我们可以控制的。

Trap的初始化

        设置入口函数;

Trap的top half

        trap发生时,hart自动执行如下状态转换 

Trap的handler        

        软件需要做的事情

Trap的退出

        编程调用mret

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玟林禹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值