此帖出自嵌入式系统论坛
最新回复
18. 在RISC-V处理器中,异常发生后CPU自动做了哪些事情?软件需要做哪些事情?
CPU做的事情
保存当前 PC 值到mepc 寄存器中
把异常的类型更新到mcause 寄存器
把发生异常时的虚拟地址更新到 mtval 存器中
保存异常发生前的中断状态,即把异常发生前的 MIE 字段保存到 mstatus 寄存器的MPE 字段中
保存异常发生前的处理器模式(如U 模式、S 模式等),即把异常发生前的处理器模式保存到mstatus 寄存器的MPP 字段中
关闭本地中断,即设置mstatus 寄存器中的MIE字段为0
设置处理器模式为M模式
跳转到异常向量表,即把 mtvec 寄存器的值设置到PC 寄存器中
系统需要做的事情。
保在异常发生时的上下文,上下文包括所有通用存器的值和部分 M模式下的寄存器的值。上下文需要保存到栈里。
查询 mcause 寄存器中的异常以及中断编号,跳转到合适的异常处理程序中
异常或者中断处理完成之后,恢复保存在栈里的上下文
执行MRET指令,返回异常现场
19. 当返回时,异常是返回到发生异常的指令还是下一条指令?
是否返回下一条指令,要做不同情况下的分析:
对于异步异常(中断),它的返回地址是第一条还没执行或由于中断没有成功执行的指令。
对于不是系统调用的同步异常,如数据异常、访问没有映射的地址等,它返回的是触发同步异常的那条指令。
系统调用返回的是系统调用指令(如 ECALL 指令)的下一条指令。
20. 异常发生后,软件需要保存异常上下文,异常上下文包括哪些内容?
异常发生时,需要在栈空间里保存如下内容:
x1~x31 通用寄存器的值
spec 寄存器的值
sstatus 寄存器的值
sbadaddr 寄存器的值
scause 寄存器的值
注意:这个栈空间指的是发生异常时进程的内核模式的栈空间。
21. 什么是中断现场?对于RISC-V处理器来说,中断现场应该保存哪些内容?
中断现场指:MCU在执行中断服务程序前的运行状态,包括内部寄存器,断点地址等。
RISC-V将按下列流程处理:
1. 保存中断发生前的中断状态,即把中断发生前的SIE位保存到sstatus 寄存器中的SPIE字段
2. 保存中断发生前的处理器模式状态,即把异常发生前的处理器模式编码保存到 sstatus寄存器的 SPP 字段中。
之后触发中断处理流程
详情
回复
发表于 2023-5-26 10:32
| ||||||||||
个人签名微信搜索公众号“EEWORLDBBS”快去添加关注吧!
|
||||||||||
此帖出自嵌入式系统论坛
点评 | ||
|
||
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
论坛测评队员
EEWorld Datasheet 技术支持