Risc-V:能够利用 GCC 的简单 RV32I 实现的最低 CSR 要求

2023-12-04

对于能够运行 GCC 生成的机器代码的 RV32I,最低的 CSR 要求是什么?

我正在考虑一个简单的基于 fpga(嵌入式)的实现。不需要虚拟内存或 Linux 支持。

另外,我应该使用什么 GCC 标志来防止它使用未实现的 CSR 相关指令?

浏览完 RISCV 特权 ISA 规范后,我仍然很困惑。

Thanks!


看看RARS模拟器作为简单 RISC V 实现的示例。它实现了足够的 CSR(例如异常原因、处理器状态、异常 pc、向量表地址等),您可以对中断处理程序进行编程。

你需要:

  • utvec— 设置异常处理程序地址
  • ustatus— 启用/禁用中断,
  • uscratch- 软件异常处理程序需要,
  • ucause— 说明异常的原因
  • uepc— 告诉异常时未完成指令的地址

还有其他一些。在RARS中,您可以在寄存器显示中看到实现的寄存器,控制和状态 tab.

我相信 RARS 支持计时器,所以有一些 为此的企业社会责任。它还提供浮点单元,因此一些 CSR 对于例外情况以及舍入配置。为了 处理内存访问异常,它有utval。然后它 提供一些柜台。另见表 2.2文件版本 20190608-Priv-MSU-已批准

我认为您对 CSR 的使用将仅限于独立应用程序配置,例如初始启动和中断处理,两者都可以用汇编语言编写。

很难想象编译后的 C 代码(目标文件,.o)会以任何方式触及 CSR。如果您有这样的例子,请分享。

在某些环境中,C 实现允许独立(例如非托管)程序。由某些编译器创建的此类程序可能包括启动配置和异常处理程序,尽管这些更有可能是用户提供的。例如,参见http://cs107e.github.io/guides/gcc/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Risc-V:能够利用 GCC 的简单 RV32I 实现的最低 CSR 要求 的相关文章

  • 编译器特定的内存初始化

    有没有办法保证整个程序中某些对象的静态对象初始化顺序 我有内存分配器 我希望将其作为程序中的第一件事进行分配 因为它们将在整个程序的其他地方使用 并且我想使用这些分配器来分配所有后续内存 我知道这可能是特定于编译器的 因为我不相信 C 标准
  • 我如何知道 std::map 插入成功还是失败?

    我在多线程应用程序中有一个映射 将名为 uuid 的类映射到指针 我想知道插入操作是否成功或失败 e g mymap insert hint MyMap value type entry uuid itemptr 如果失败的话会抛出异常或者
  • 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此 Braced-Init-List 代码?

    我有一个问题大括号括起来的列表的不同含义 https stackoverflow com q 37682392 2642059 我知道C 03不支持C 11initializer list 然而 即使没有 std c 11编译器标志 gcc
  • GCC 内联 asm NOP 循环在编译时未展开

    走出我通常的 VC 领域 进入 GCC 的世界 通过 MINGW32 尝试创建一个主要由 NOP 组成的 Windows PE ala for i 0 i lt 1000 i asm nop 但要么我使用了错误的语法 要么编译器正在通过它们
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • C typedef:参数的类型不完整

    GCC 3 4 5 MinGW 版本 产生警告 以下 C 代码第 2 行的参数类型不完整 struct s typedef void func t struct s this struct s func t method int dummy
  • 当下一条(跳过)指令是变量定义时,Shellcode 中的 JMP 意外行为

    Purpose 我试图利用 x86 64 中的 RIP 模式 尽管程序集本身按预期执行 但 shellcode 却没有 问题 简而言之 我尝试过的是这样的 jmp l1 str1 db some string l1 other code l
  • 安装 Ta-lib 会产生 gcc 错误

    当我尝试在我的 mac 上将 Ta lib 作为全局包安装时 出现 gcc 错误 我收到以下错误 gcc Wno unused result Wsign compare Wunreachable code DNDEBUG g fwrapv
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • 解析 std::type_info::name 的结果

    我目前正在编写一些日志记录代码 这些代码应该 除其他外 打印有关调用函数的信息 这应该是比较容易的 标准C 有一个type info班级 这包含 typeid 类 函数 等的名称 但它已经损坏了 这不是很有用 IE typeid std v
  • C++11正则表达式匹配[重复]

    这个问题在这里已经有答案了 我正在尝试在 C 11 中进行相当简单的正则表达式匹配 使用 gcc 4 7 2 但我遇到了很多麻烦 尝试使用构建模式 std regex unquoted R regex s s regex 导致构造函数抛出一
  • 链接器如何在没有 SONAME 的情况下找到共享库

    如果我创建一个没有这样的 SONAME 的共享库 gcc shared libfoo o o libfoo so 并链接到它 链接器如何找到我的共享库 是文件名libfoo so链接器将其视为默认 SONAME 吗 我想你是正确的 ld 手
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL
  • 在 '*' 标记之前编译“错误:预期 ')' 时出现多个相同错误

    我正在尝试用 C 语言编程 当我使用以下参数进行编译时 gcc D BSD SOURCE Wall ansi pedantic g tokenizer c FileOccur c WordList c wordstat c indexer
  • 全局变量在函数调用之间是否刷新?

    我正在编写嵌入式固件 发现有时很难决定何时需要易失性 当我有一个等待中断更改某个布尔标志的函数时 很明显该标志需要是易失性的 因为否则该函数将永远等待 因为编译器没有意识到该值可以通过打断 但是 当我有一个只检查第一行中的标志的短函数时 我
  • 为什么 x86-64 上的 GCC 在函数内插入 NOP?

    给定以下 C 函数 void go char data char name 64 strcpy name data x86 64 上的 GCC 5 和 6 编译 普通gcc c g o其次是objdump 这到 00000000000000
  • 所有 CopyConstructible 类型都是 MoveConstructible 类型吗?

    根据工作草案 N3337 与已发布的 ISOC 11 标准最相似的草案 和cppreference com http en cppreference com w cpp concept CopyConstructible 答案是肯定的 N3
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • GCC 如何运行其他程序?

    也许标题并没有那么准确地表达问题 我知道当我跑步时gcc foo cGCC 调用其他为其完成所有工作的子程序 使 gcc 主程序只是一个接口 但这到底是如何完成的呢 是否使用system or exec或者其他一些功能 我之所以想知道这个是

随机推荐

  • 将自定义图标添加到 Woocommerce 购物车和结帐中的运输选项

    我想将图标添加到 Woocommerce 购物车和结账中的运输选项 例如 在 本地取货 选项中 我想在选项旁边显示一个小商店图标 如下所示 https ibb co jz0jJgk 我尝试在 Woocommerce gt 设置 gt 运输选
  • 谁创建了索引?

    是否可以检查谁在 SQL Server 上创建了索引 我只找到列出时间的脚本 select STATS DATE so object id index id StatsDate si name IndexName schema name s
  • 为 Angular 2 身份验证启用 WebAPI CORS

    我在 stackoverflow 上看到了一些答案 但我迷路了 我有 webapi 2 独立的 Angular 2 webapi项目来自模板 我唯一改变的是我添加了 CORS 并将以下行添加到 IdentityConfig cs gt Ap
  • 如何创建可在 Bootstrap 3 中缩放的响应式图像

    我目前正在使用 twitter bootstrap 3 并且在创建响应式图像时遇到问题 我用过img responsive班级 但图像尺寸并未放大 如果我使用width 100 代替max width 100 然后它就完美地工作了 哪里有问
  • ASP.NET MVC:将 ViewModel 相互嵌套,是否存在反模式?

    我有一个项目 其中 ViewModel 相互嵌套 因此它们本质上是域层次结构的字符串类型复制 例如 如果我们的域具有以下关系 组织有 1 到多个环境 环境有 1 到多台机器 那么将会有一个 OrganizationViewModel 其中包
  • Leetcode 200. 岛屿数量 TLE

    问题链接 https leetcode com problems number of islands 给定一个由 1 陆地 和 0 水 组成的二维网格图 计算岛屿的数量 岛屿四面环水 相邻陆地水平或垂直连接而成 您可以假设网格的所有四个边缘
  • R pheatmap:执行聚类并显示每个注释类别的树状图

    我知道如何使用 pheatmap 按注释类别对行 基因 进行分组 并且我知道如何对整组行 基因 执行 Person 的相关聚类 但我想要完成的是执行聚类 并显示独立的每个类别独立的树状图 这可能吗 或者我是否被迫为每个类别创建单独的热图以在
  • 4 个条件中的 2 个以上正则表达式

    我对用户密码有4个要求 至少 1 个 a z 字符 至少 1 个 A Z 字符 至少 1 个 0 9 字符 至少 1 个符号 但是 用户只需满足 4 个条件中的 2 个以上即可 密码VVVV1111 234567 AaAaAaAa or A
  • Python中的一等函数是什么

    我仍然对什么是一流函数感到困惑 如果我理解正确的话 一等函数应该使用一个函数作为对象 它是否正确 这是一流的功能吗 def this is example myarg1 return myarg1 def this is another e
  • 具有位置条件的 MongoDB 分页

    我想要获取按字段排序的数据 例如 db Users find limit 200 sort rating 1 skip 0 这是工作 我得到了排序的数据 并且可以使用分页 但是 如果添加条件 find location near 12 32
  • 将搜索文本字段实现到 jTable 中

    现在我有一个使用 KeyReleased 事件实现的搜索文本字段 当我开始输入例如 Andrew 中的 An 时 它没有找到 更新 jTable 并且在我完成准确输入 区分大小写 我想要的名称之后寻找 所以 我想要的是从此实现 Filter
  • 有没有办法在 Perl 的文件读取器中指定行标记分隔符?

    我正在 Perl 中通过 CGI 读取文本文件 并注意到当文件保存在 mac 的 textEdit 中时 行分隔符可以被识别 但是当我上传直接从 Excel 导出的 CSV 时 它们不能被识别 我猜这是一个 n 与 r 问题 但这让我想到
  • Mercurial 每种文件类型的合并策略

    All 我想使用 kdiff 合并具有特定后缀 例如 c h 的所有文件 并且我想对具有另一个后缀 例如 c h 的所有文件做两件事 关闭预合并并使用内部 其他 mdl 这样做的目的是允许我对特定文件类型使用一种 破坏合并 即 不可合并的文
  • 使用 javascript 将文件附加到 input type="file"

    我需要将 JavaScript 生成的文件 最多几 MB 发送到服务器 我需要用 POST 不是 ajax POST 来完成 如何通过 JavaScript 将文件添加到 input type file 根据预填充 HTML 表单文件输入由
  • 无法在 JavaScript 中启用按钮

    我也尝试过这个 但仍然不起作用 find set enabled true
  • 清单合并失败:uses-sdk:minSdkVersion 8 不能小于库中声明的版本 9 [com.google.android.gms:play-services:7.8.0]

    问题是 错误 任务 app processDebugManifest 执行失败 清单合并失败 uses sdk minSdkVersion 8 不能小于库 com google android gms play services 7 8 0
  • 优化的合并排序比快速排序更快

    http jsperf com optimized mergesort versus quicksort 为什么这种半缓冲区合并排序的速度与快速排序一样快 快速排序是 虽然它占用了原地log n 递归 堆栈空间 缓存友好 这个半缓冲区合并排
  • belongs_to 和 has_one 之间有什么区别?

    和有什么区别belongs to and a has one 阅读 Ruby on Rails 指南对我没有帮助 他们本质上做同样的事情 唯一的区别是你站在关系的哪一边 如果一个User has a Profile 然后在User你会上的课
  • 带三角形条的圆圈

    我一直在尝试在 OpenGL 中创建一个圆圈 但我不能使用三角形扇形 因为我读到它们在 directx 中不再可用 而且我还将进行 directx 调用 我不太明白三角形带是如何工作的 我所有的实现都有漏洞或奇怪的怪癖 任何人都可以帮助我
  • Risc-V:能够利用 GCC 的简单 RV32I 实现的最低 CSR 要求

    对于能够运行 GCC 生成的机器代码的 RV32I 最低的 CSR 要求是什么 我正在考虑一个简单的基于 fpga 嵌入式 的实现 不需要虚拟内存或 Linux 支持 另外 我应该使用什么 GCC 标志来防止它使用未实现的 CSR 相关指令