问题标签 [riscv32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
430 浏览

c - 使用 C 程序可以访问 RISC-V 的寄存器文件吗?

我想使用 C 程序访问 RISC-V 的寄存器文件。有什么方法可以使用 C 程序直接写入和读取 RISC-V 的寄存器文件?

0 投票
1 回答
202 浏览

assembly - RISC-V 汇编语言。只打印零

以下代码应该采用两个列表并将它们放入一个大列表(C[10])中,作为汇编的初学者,我不确定如何检查我的输出是否正确。我尝试实现打印以检查左半部分是否有效,但它只打印零。(https://www.kvakil.me/venus/使用这个网站作为模拟器)

我猜代码应该打印 0224 但它只打印 0。

0 投票
1 回答
115 浏览

compiler-errors - 编译 rv32i 代码包括压缩指令

我试图将平淡无奇的 c 代码编译为 RV32i 处理器可执行的 elf 格式。

但是,当我启用优化(-Os 或 -O2)时,生成的程序集包含我无法执行的压缩指令。我所有的自制代码都被编译成普通的 rv32i 指令,只有辅助函数*被编译成 C 指令。如何完全禁用 C 指令?

使用辅助函数我的意思是 __riscv_save_0, __riscv_restore_0, __riscv_save_4, ...

我使用编译代码

CFLAGS 为:

反汇编看起来像这样 - 优化:(出于某种原因,我的所有代码都没有 C 指令,所有辅助函数都带有 C 指令)

0 投票
1 回答
78 浏览

memory-management - 在 RISC-V 上执行动态生成的代码

我正在为 RISC-V 编写类似 Forth 的语言,这自然意味着我需要有一种方法来允许用户定义新单词并执行它们。

但是我正在努力寻找一种允许用户执行动态生成的代码而不使用特权指令来更改页面状态的方法。有没有办法做到这一点 - 例如,我可以在 .text 中定义一个大的空白部分(而不是我目前正在做的 .bss )?

还是我必须编写一个显式的陷阱处理程序?

更新:我将 pk 代理内核与 Spike 一起使用。我正在对 .bss 部分中创建的缓冲区或 .text 部分中的分配执行 mprotect 系统调用。

在任何一种情况下,mprotect 调用都会失败 - 返回 -EACCES。(因此,在尝试执行新代码时使用 .bss 版本会失败,而在尝试编写新代码时使用 .text 版本会失败。)

似乎我无法将页面标记为 R/W/X - 这可能是基本的。有没有办法解决这个问题(肯定有!)

0 投票
0 回答
204 浏览

system-calls - RISC-V (RV32I) - SCALL/ECALL、SBREAK/EBREAK、FENCE、FENCE.I

我试图了解以下指令对 RISC-V(仅具有机器权限的 RV32I)的作用和作用:SCALL/ECALL SBREAK/EBREAK,FENCE FENCE.I

0 投票
0 回答
196 浏览

riscv - 创建自定义 RISC-V 指令时无法识别的操作码

我已经下载了rocket-chiprepo 和相应的rocket-toolsrepo。当我最初构建一切时,一切都很好。

我为 AES 算法创建了自己的紧密耦合加速器,并希望使用custom-0andcustom-1指令对其进行测试。我已按照riscv-isa-simrepo ( https://github.com/riscv/riscv-isa-sim ) 中的说明模拟新指令并成功重建rocket-tools

我想做一个非常简单的组装测试rocket-tools/riscv-tests/isa/rv64ui/来测试我的新指令,但是当我makeisa文件夹中运行时,我得到了Error: unrecognized opcode所有指令:

在 RISC-V 中实现自定义指令的正确方法是什么?我尝试按照本教程进行操作,但在运行尖峰时出现分段错误:https ://nitish2112.github.io/post/adding-instruction-riscv/

0 投票
1 回答
28 浏览

riscv - 为什么在 RISC-V ISA 中永远无法访问地址空间中的空白位置?

我正在阅读 RISC-V 指令集手册第一卷:非特权 ISA,我遇到了一个非常奇怪的声明。在第 1.4 小节第 5 段末尾的内存中声明“地址空间中的空白位置永远无法访问”。我有点困惑并对此进行了搜索,但我无法得出任何结论。如果您与我分享您的想法,我们将不胜感激。

0 投票
2 回答
452 浏览

assembly - 如何从 risc-v 程序集中的立即 32 位地址加载一个字?

我想将 0x0200bff8 地址中的一个字加载到 t1 寄存器中。我尝试了以下方法;

我认为它在语法上是正确的,但我看到了这个错误

错误:非法操作数“lw t1,0xff8(t0)”

我做错了什么,就减少从立即地址加载单词的指令而言,什么是好方法?

0 投票
1 回答
92 浏览

exception - 如何清除 risc-v 处理程序中的异常?

以下是我在 FE310 Sifive-Hifive1-Rev B 板上的陷阱例程。

现在,我生成了一个加载访问错误异常,并且执行跳转到了陷阱例程中。现在如何清除处理程序内部的异常,使其不会一次又一次地跳入陷阱例程?

0 投票
1 回答
272 浏览

riscv - 使用 risc-v 定时器中断和用尖峰模拟的问题

我正在尝试进行计时器中断,我安装了以下 risc-v_tools riscv64-unknown-elf-gcc工具链、spike simulation和pk。这是我的代码:

当它编译我的程序时,它没有问题,但是当我模拟它时,它向我显示以下错误:

我在调试模式下模拟它,我看到一个进入循环并且不再退出,所以它已经表明它是由于一个非法指令,但我不知道是哪一个。我模拟并编译了 github 链接https://github.com/riscv/riscv-tests/blob/master/debug/programs/interrupt.c中具有 risc-v 的程序 的中断,但它给我带来了同样的错误.

我的问题是,问题是代码还是模拟器?

任何可以指导我的人都会非常感激,因为我是这些 RISC-V 工具的新手