RISC-V 指令架构 -- 模式切换
术语
缩写 | 介绍 |
---|---|
CSR | Control and status register |
ISA | Instruction Set Architecture |
RISC-V 特权模式
处理器支持三种特权模式,机器模式,监督模式,用户模式。
- 机器模式: 拥有最高的特权,处理器上电就处于此模式,特权模式编码为0x03。
- 监督模式: 一般运行OS kernel,特权模式编码为0x01。
- 用户模式: 运行用户APP,特权模式编码为0x00。
机器子模式(芯来 core)
正常的机器模式,Machine Sub-Mode为0x00
中断处理模式,Machine Sub-Mode为0x01
异常处理模式,Machine Sub-Mode为0x02
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 指令架构 -- 模式切换相关推荐
- 计组学习笔记2(RISC v版)
指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- CPU的RISC和CISC架构的区别
CPU的RISC和CISC架构的区别 有关RISC和CISC的区别方面, 之前就有一些零零碎碎的理解, 这里再次做一次总结, 以求深入. CISC架构的代表: x86, C51 RISC架构的代码:a ...
- Vue的基础认知一---构建环境/v指令的使用
大家新年好啊,不对,今天是情人节呢,哈哈哈,祝大家节日快乐,你们是不是都出去约约约了啊,好吧,你们都去玩吧,我在家码代码,汗~讲真,这大过年的实在是不愿意学习啊,可是眼看着好久没写博文了,心里有点过意 ...
- 【使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本时报错】
正点原子I.MX6U 用户快速体验PDF116页中,使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本命令如下: 由于复制错误复制为: arm-poky-li ...
- Vue中常用的8种v指令
Vue中常用的8种v指令 根据官网的介绍,指令 是带有 v- 前缀的特殊属性.通过指令来操作DOM元素 指令 功能 v-text="变量/表达式" 文本的设置 字符串变量+数字可以 ...
- 科普 | 处理器RISC和CISC架构分析对比
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 CISC(复杂指 ...
- ios cpu指令架构
• i386 : 32位架构 4S ~ 5 • x86_64 : 64位架构 5S ~ 现在的机型 真机架构: • armv7: 在最老的支持iOS7的设备上使用 • armv ...
- webpack -v 指令报错
(1)webpack 安装完成以后报错, One CLI for webpack must be installed. These are recommended choices, delivered ...
最新文章
- 重磅推出开发者计划、App Store,赛灵思普及自适应计算的一大步
- Python3 文件的重命名
- 参考文献中的字母含义
- 全球及中国食品供应区块链行业运行形势及未来投资规模建议报告2021年版
- 对重复的记录使用SQL进行查询和删除等操作
- 获取用户精准地理位置信息(百度地图)
- 荣耀2021年度手机颜值天花板首销!2699元起
- C语言与汇编“硬在哪里”——什么是面向硬件?
- 清理电脑文件夹中的Thumbs.db文件
- oracle的varchar用法,以VARCHAR2作为key的索引表的使用
- html如何设置hr 标签的线条粗细,html中hr怎么设置粗细
- EditPlus 5.0 中文免费版,不谢拿走
- LBM学习记录4 Python实现D3Q19圆柱绕流
- SyntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file C:/Users/0moyi0/Desktop/DeepLearningExample
- 插画版Kubernetes指南(小孩子也能看懂的kubernetes教程)
- 环状二肽,82863-65-8,cyclo(Leu-Tyr)
- 系统管理员的3大黄金法则
- MATLAB中datetime函数的使用
- 考研 计算机组成原理大纲,2020计算机组成原理考研大纲解析
- MediaInfo使用简介
热门文章
- java课程设计(学生信息管理系统设计)+数据库
- mysql远程服务器返回错误404_服务器常见页面访问返回错误信息(404 500 400)表示什么意思...
- matlab:实现“必应”的图片搜索功能并将图片保存
- POI 导入、导出Excel
- 文献 | 越想快乐,越不快乐
- Vue报错:implicitly has an ‘any‘ type解决方法
- 保存切片找不到html,HTML5切片,结果文件损坏
- 攻防世界we区newer题目
- android 加密手机功能,怎么为安卓手机加密
- 网络流-最大流(Ford-Fulkerson算法Dinic算法)