ARM-M与RISC-V(32bit)的区别--基于CM4与Nuclei_N300
1 systick与core timer
ARM Cortex-M内核包含了一个SysTick定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。
而RISC-V内核中自带一个core timer, core timer是一个64位的定时器, 可以用于产生定时器中断或软件中断
SysTick或core timer等内核定时器, 常用于作为RTOS的心跳时钟
2 中断与异常
在ARMv7中中断是异常的一种特例
而在RISC-V内核中, 中断与异常是严格区分的, 异常与中断均属于Trap(陷阱), 其中中断是异步的,可以被屏蔽 , 异常是同步的, 不可被屏蔽, 并且异常处理时, 硬件会自动关闭全局中断
3 NVIC与ECLIC
NVIC与ELCIC均是ARM-M与RISC-V内核实现的中断控制器, 但是在以下方面有不同之处
3.1 向量中断与非向量中断
NVIC中, 所有的中断都是向量中断, ISR地址由中断向量表保存
ECLIC中, 中断分为向量中断和非向量中断, 两者在下方的中断优化策略的支持中有所不同, 同时ECLIC也有一张中断向量表, 非向量中断共用一个ISR, 再从ISR中判断中断源
3.2 中断优化
3.2.1 中断硬件保护现场
ARM-M中, 中断触发后, 硬件会自动将寄存器信息保存到栈中
而在RISC-V中, 中断触发后, 硬件不会自动保存, 需要软件编写中断上下文的保存与恢复
3.2.2 中断咬尾
ARM-M中, 中断咬尾是一个重要的中断优化
RISC-V中, 非向量中断是支持中断咬尾的, 而向量中断不支持中断咬尾
3.2.3 中断晚到
ARM-M中支持中断晚到优化
RISC-V中不支持中断晚到优化
3.3.4 中断嵌套
ARM-M中支持中断嵌套
RISC-V中非向量中断支持中断嵌套, 向量中断需要软件实现中断上下文的保存与恢复, 并且处理器内核在响应中断后,mstatus寄存器中的MIE域将会被硬件自动更新成为0(意味着中断被全局关闭,从而无法响应新的中断)。因此向量处理模式默认是不支持中断嵌套的,为了达到向量处理模式且又能够中断嵌套的效果, 需要软件实现一些特殊的入栈操作: 0
首先保存CSR寄存器mepc、mcause、msubm入堆栈。保存这几个CSR寄存器是为了保证后续的中断嵌套能够功能正确,因为新的中断响应会重新覆盖mepc、mcause、msubm的值,因此需要将它们先保存入堆栈。
重新打开中断的全局使能,即,设置mstatus寄存器的MIE域为1。打开中断全局使能后,新的中断便可以被响应,从而达到中断嵌套的效果。
在中断服务程序的结尾处同样需要添加对应的恢复上下文出栈操作。并且在CSR寄存器mepc、mcause、msubm出堆栈之前,需要将中断全局使能再次关闭,以保证mepc、mcause、msubm恢复操作的原子性(不被新的中断所打断)。
3.3.5 中断仲裁
NVIC中, 中断仲裁机制由中断优先级号来划分, 中断优先级数字越小, 优先级越高, 同时可以进行优先级分组
ECLIC中, 中断仲裁机制是由四个因素决定:中断level、中断priority、中断 ID号、中断阈值,这四个因素的判定顺序是中断level>中断priority>中断ID号> 中断阈值,其中前三个因素都是数字越大表明仲裁优先级高,最后一个因素只有当 中断level的数值大于中断阈值时,中断才会生效。
4 PendSV异常与软件中断
ARM-M中, 支持PendSV异常挂起, PendSV是一个最低优先级的异常(中断), 优点是可以在保证高优先级的中断优先执行, 在无中断时及时响应, 常常被RTOS用来实现上下文的保存与切换
RISC-V中, 没有PendSV异常, 但是core timer支持软件中断, 可以将该中断设置为最低优先级, 来实现中断挂起的功能, 来实现与PendSV相同的功能
5 特权模式
ARM-M中, 特权模式分为用户模式与特权模式
RISC-V中, 特权模式划分如下

| 特权级 | 名称 | 访问权限 | 典型应用 |
| M-mode | 机器模式 | 访问所有CSR、物理内存、中断控制器 | Bootloader/安全监控 |
| S-mode | 监管模式 | 受限CSR、虚拟内存管理(通过satp) | 操作系统内核 |
| U-mode | 用户模式 | 最小权限,受限内存访问 | 应用程序 |
Nuclei_N系列仅支持两种特权模式: 机器模式和用户模式 其中机器模式又分出有4个子模式
ARM-M与RISC-V(32bit)的区别--基于CM4与Nuclei_N300的更多相关文章
- ARM、Intel、MIPS处理器啥区别?看完全懂了
安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...
- ARM、Intel、MIPS处理器啥区别?看完全懂了【转】
转自:http://news.mydrivers.com/1/472/472317.htm 安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于 ...
- ARM 处理器:RISC与CISC 是什么?【转】
转自:https://blog.csdn.net/willsun2017/article/details/83388990 完全看懂 ARM 处理器:RISC与CISC 是什么? 历史.架构一次看透 ...
- ARM、X86和AI处理器的区别
ARM.X86和AI处理器的区别 目前主要的处理器架构有: X86: Intel, AMD, 海光, 兆芯 ARM: 华为,飞腾,华芯通,Cavium,Ampere,富士通,亚马逊 POWER:IBM ...
- posix和system v有什么区别/?
posix和system v有什么区别/?现在在应用时应用那一标准浮云484212 | 浏览 243 次 2014-11-06 10:362014-11-19 22:36 最佳答案们是有关信号量的两组 ...
- ARM概论(Advanced RISC Machines)
简介 ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具有比较低的电源消耗和良好的性价比, 基于(精简指令)RISC结构,指令集和相关的译码机制与微程 ...
- ARM菜鸟:JLINK与JTAG的区别
调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种.当仿真时,IAR.KEIL.ADS等都有一个公共的调试接口,RDI就是其中的一种,那么我们如何完成RDI-->ARM调试协议(JT ...
- C++:vector中的v.at(0)和v[0]的区别
设v是一个vector的对象, 如果v是非空的,则v.at(0)和v[0]是没有区别的,都是取数组中第一个值: 如果v是空的,则v.at(0)会抛出异常(exception std::out_of_r ...
- docker 挂载主机目录 -v 和 --mount区别
使用-v 时,如果宿主机上没有这个文件,也会自动创建, 但是如果使用--mount时,宿主机中没有这个文件会报错找不到这个文件,并创建失败
- [Linux]CPU架构/指令集:RISC / CISC | arm | amd | X86/i386 | aarch64
1 前言 本文是解决在软件开发.软件交付过程中,常常需要找寻与服务器硬件的CPU架构适配的软件包时,开发者和交付者又时常摸不着头脑.[迷迷糊糊]地就下载了某个所谓"适配".&quo ...
随机推荐
- 鸿蒙NEXT开发实用技巧:通用工具类
今天分享一个幽蓝君自己在开发中的小技巧,就是封装一个通用工具类,之前大家如果下载过幽蓝君的代码可能也会发现这个东西.比如我们在开发中有一些比较常用的颜色.尺寸或者方法,都可以用一个类封装起来,这样不仅 ...
- ISCC区域赛wp
ISCC区域 Web 哪吒的试炼 根据吃藕猜测要传参food /?food=lotus root 来到下一关 f12看源码 发现disable,把这个属性删掉 <?php if (isset($ ...
- String Manipulation related with pandas
String Manipulation related with pandas String object Methods import pandas as pd import numpy as np ...
- AI智能体策略FunctionCalling和ReAct有什么区别?
Dify 内置了两种 Agent 策略:Function Calling 和 ReAct,但二者有什么区别呢?在使用时又该如何选择呢?接下来我们一起来看. 1.Function Calling Fun ...
- 乌班图20.04上安装java配置tomcat9
原文参考:https://blog.csdn.net/u010763324/article/details/122678528 Apache Tomcat是一个开源的 Web 服务器和 Java se ...
- CentOS 7 系统调优深度指南
从内核参数.资源分配.存储性能到网络优化,覆盖全维度调优策略,并强调稳定性保障. 一.调优核心维度与操作命令 1. 内核参数调优 (/etc/sysctl.conf) bash # 编辑配置文件 vi ...
- mysql的递归写法:部门层级
前言 详细的可以参考:https://cloud.tencent.com/developer/article/2106748 这里用 WITH RECURSIVE 实现递归,需要 MySQL 8.0 ...
- 洛谷P2024 [NOI2001]食物链 种类并查集
洛谷P2024 [NOI2001]食物链 题目描述 见食物链 - 洛谷 \(n\le5*10^4\) \(k\le10^5\) Recollection 初中的时候想了一个假掉了的算法想了很久. 刚刚 ...
- VSCode安装配置C++环境教程
前言 IDE--集成开发环境,用于提供程序开发环境,集成了代码编写.分析.编译和调试等一体化的的套件.如C++的Visual Studio.Java的IDEA和Python的PyCharm等.IDE部 ...
- DeepSeek MOE 代码实现
前置知识: PyTorch 基础函数操作整理 1. topk 操作 功能: torch.topk 用于返回输入张量中指定维度上的前 k 个最大元素及其对应的索引. 示例代码: import torch ...