术语

缩写 介绍
CSR Control and status register
ISA Instruction Set Architecture

RISC-V 特权模式

  • 处理器支持三种特权模式,机器模式,监督模式,用户模式。

    1. 机器模式: 拥有最高的特权,处理器上电就处于此模式,特权模式编码为0x03。
    2. 监督模式: 一般运行OS kernel,特权模式编码为0x01。
    3. 用户模式: 运行用户APP,特权模式编码为0x00。
  • 机器子模式(芯来 core)

    1. 正常的机器模式,Machine Sub-Mode为0x00

    2. 中断处理模式,Machine Sub-Mode为0x01

    3. 异常处理模式,Machine Sub-Mode为0x02

    4. NMI处理模式,Machine Sub-Mode为0x03

      注:msubm 寄存器保存sub-Mode值

  • 模式转换

    通过指令和系统寄存medeleg.bit[8]的配合,使得机器模式,监督模式和用户模式之间转换。

    RISC-V 模式转换图

机器模式切换到用户模式

void user_mode_entry()
{printf("RISC-V user mode say hello\n");while(1);
}
void switch_mode()
{unsigned int pmp_config = 0x1f;//NAPOT|R|W|Xunsigned int mepc_addr = (unsigned int)user_mode_entry;asm volatile ("csrw pmpcfg0, %0\n\t""csrw pmpaddr0, %1\n\t"                  "csrc mstatus, %2\n\t""csrw mepc, %3\n\t""mret": : "r" (pmp_config), "r" (-1UL), "r" (0x1800), "r" (mepc_addr) : "memory");
}

用户模式切换到机器模式

struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0,unsigned long arg1, unsigned long arg2,unsigned long arg3, unsigned long arg4,unsigned long arg5)
{struct sbiret ret;register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0);register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1);register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2);register uintptr_t a3 asm ("a3") = (uintptr_t)(arg3);register uintptr_t a4 asm ("a4") = (uintptr_t)(arg4);register uintptr_t a5 asm ("a5") = (uintptr_t)(arg5);register uintptr_t a6 asm ("a6") = (uintptr_t)(fid);register uintptr_t a7 asm ("a7") = (uintptr_t)(ext);asm volatile ("ecall": "+r" (a0), "+r" (a1): "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7): "memory");ret.error = a0;ret.value = a1;return ret;
}

RISC-V 指令架构 -- 模式切换相关推荐

  1. 计组学习笔记2(RISC v版)

    指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...

  2. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  3. CPU的RISC和CISC架构的区别

    CPU的RISC和CISC架构的区别 有关RISC和CISC的区别方面, 之前就有一些零零碎碎的理解, 这里再次做一次总结, 以求深入. CISC架构的代表: x86, C51 RISC架构的代码:a ...

  4. Vue的基础认知一---构建环境/v指令的使用

    大家新年好啊,不对,今天是情人节呢,哈哈哈,祝大家节日快乐,你们是不是都出去约约约了啊,好吧,你们都去玩吧,我在家码代码,汗~讲真,这大过年的实在是不愿意学习啊,可是眼看着好久没写博文了,心里有点过意 ...

  5. 【使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本时报错】

    正点原子I.MX6U 用户快速体验PDF116页中,使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本命令如下: 由于复制错误复制为: arm-poky-li ...

  6. Vue中常用的8种v指令

    Vue中常用的8种v指令 根据官网的介绍,指令 是带有 v- 前缀的特殊属性.通过指令来操作DOM元素 指令 功能 v-text="变量/表达式" 文本的设置 字符串变量+数字可以 ...

  7. 科普 | 处理器RISC和CISC架构分析对比

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 CISC(复杂指 ...

  8. ios cpu指令架构

    •    i386 : 32位架构 4S ~ 5 •    x86_64 : 64位架构 5S ~ 现在的机型 真机架构: •    armv7: 在最老的支持iOS7的设备上使用 •    armv ...

  9. webpack -v 指令报错

    (1)webpack 安装完成以后报错, One CLI for webpack must be installed. These are recommended choices, delivered ...

最新文章

  1. 重磅推出开发者计划、App Store,赛灵思普及自适应计算的一大步
  2. Python3 文件的重命名
  3. 参考文献中的字母含义
  4. 全球及中国食品供应区块链行业运行形势及未来投资规模建议报告2021年版
  5. 对重复的记录使用SQL进行查询和删除等操作
  6. 获取用户精准地理位置信息(百度地图)
  7. 荣耀2021年度手机颜值天花板首销!2699元起
  8. C语言与汇编“硬在哪里”——什么是面向硬件?
  9. 清理电脑文件夹中的Thumbs.db文件
  10. oracle的varchar用法,以VARCHAR2作为key的索引表的使用
  11. html如何设置hr 标签的线条粗细,html中hr怎么设置粗细
  12. EditPlus 5.0 中文免费版,不谢拿走
  13. LBM学习记录4 Python实现D3Q19圆柱绕流
  14. SyntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file C:/Users/0moyi0/Desktop/DeepLearningExample
  15. 插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
  16. 环状二肽,82863-65-8,cyclo(Leu-Tyr)
  17. 系统管理员的3大黄金法则
  18. MATLAB中datetime函数的使用
  19. 考研 计算机组成原理大纲,2020计算机组成原理考研大纲解析
  20. MediaInfo使用简介

热门文章

  1. java课程设计(学生信息管理系统设计)+数据库
  2. mysql远程服务器返回错误404_服务器常见页面访问返回错误信息(404 500 400)表示什么意思...
  3. matlab:实现“必应”的图片搜索功能并将图片保存
  4. POI 导入、导出Excel
  5. 文献 | 越想快乐,越不快乐
  6. Vue报错:implicitly has an ‘any‘ type解决方法
  7. 保存切片找不到html,HTML5切片,结果文件损坏
  8. 攻防世界we区newer题目
  9. android 加密手机功能,怎么为安卓手机加密
  10. 网络流-最大流(Ford-Fulkerson算法Dinic算法)