FreeRTOS 中 RISC-V-Qemu-virt_GCC 的 运行流程 的Mode分析

大家都知道, riscv 有三种Mode ,分别是 M-mode S-mode U-mode , boot 时 为 M-mode

riscv-privileged-20190608.pdf 文档中有写 一个riscv架构芯片的 模式实现 可以有三种选择
	M 			Simple embedded systems
	M, U 		Secure embedded systems
	M, S, U 	Systems running Unix-like operating systems
freertos 全程  为 M-mode , 所以可以在 任何 riscv 芯片中运行
当前Mode
没有发现 哪个寄存器 可以 show 当前 Mode
Mode 切换

  • Machine Mode -> User Mode
 /* Switch Machine sub-mode to User mode */
// MSTATUS_MPP 的值为 0x00001800,即对应 mstatus 的 MPP 位域,请参、
// 见第 7.4.7 节了解 mstatus 的位域详情。
li t0, MSTATUS_MPP
 
// 将 mstatus 寄存器的 MPP 位域清为 0
csrc mstatus, t0

// 将后面的标签 1 所在的 PC 地址赋值给 t0
la t0, 1f

// 将 t0 的值赋值给 CSR 寄存器 mepc
csrw mepc, t0

// 执行 mret 指令,则会将模式切换到 User Mode,并且从前的标签 1 处开始执行
// 程序(标签 1 即为 mret 的下一条指令的位置)
mret

// 标签 1 的位置
1:

  • User Mode -> Machine Mode
Bumblebee 内核从 User Mode 切换到 Machine Mode 只能通过异常、响应中断或者 NMI 的方式发生:

响应异常进入异常处理模式。请参见第 3.4 节了解其详情。
注意:软件可以通过调用 ecall 指令强行进入 ecall 异常处理函数。
响应中断进入中断处理模式。请参见第 5.6 节了解其详情。
响应 NMI 进入 NMI 处理模式。请参见第 4.3 节了解其详情。


  • User Mode -> Supervisor Mode
  • Supervisor Mode -> User Mode

  • Supervisor Mode -> Machine Mode
  • Machine Mode -> Supervisor Mode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值