1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-25 01:16:18 +04:00

Add doc for trap

This commit is contained in:
WangRunji 2018-07-08 02:07:20 +08:00
parent ee242b44b2
commit a09be9cc40

View File

@ -41,5 +41,44 @@ bbl-ucore使用RISCV1.9的bblucore_os_lab使用RISCV1.10的bbl。后者相比
事实上ucore_os_lab中的虚实地址并不一致且没有内存映射但依然能够运行应该是由于编译器生成的所有跳转都使用相对偏移。而Rust编译器会生成绝对地址跳转因此若虚实不一致会导致非法访存。
## Trap
参考资料:
* [bbl-ucore lab1文档](https://ring00.github.io/bbl-ucore/#/lab1)
* [RISCV官方slice](https://riscv.org/wp-content/uploads/2016/07/Tue0900_RISCV-20160712-InterruptsV2.pdf)
### Trap
* 中断帧32个整数寄存器 + 4个S-Mode状态寄存器
* 开启中断:
* stvec设置中断处理函数地址
* sstatusSIE bit 开启中断
### Timer
* 开启时钟中断:
* sieSTIE bit 开启时钟中断
* sbi::set_timer设置下次中断时间
* 读取时间:
* mtime可读出当前时间低32bit
* mtimeh当前时间高32bit仅RV32有效
因此RV32下要读取完整时间u64需循环读取判等因为指令之间可能被中断要保证原子性。详见`get_cycle()`。
* 触发中断:
* mtimecmp(h):下次触发时钟中断的时间
当time>=timecmp时触发中断
可通过sbi::set_timer设置