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

问题描述

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

解决方法

没有使用 C 语言访问寄存器的可移植方式,因为 C 在寄存器/RTL(粗略地说)之上的抽象级别上工作。

然而,可能有特定于编译器的方法来做到这一点,使用内置的编译器内部函数。见:

https://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html

https://gcc.gnu.org/onlinedocs/gcc/Explicit-Register-Variables.html

https://gcc.gnu.org/onlinedocs/gcc/Global-Register-Variables.html

https://gcc.gnu.org/onlinedocs/gccint/Registers.html

查看其他 StackOverflow 问题:

Accessing a register without using inline assembly with gcc

Reading a register value into a C variable

编辑

使用 GCC 的 C-intrinsics 似乎不支持 RISC-V 寄存器访问。您可能必须使用(内联)程序集才能获得它。

EDIT2

一些(大多数?)嵌入式处理器在没有操作系统的情况下(即不在虚拟内存系统中)运行裸机,如果您知道它们的地址,就可以访问它们的寄存器。但这在很大程度上取决于您运行的硬件。正如 Erik Eidt 所问:你想做什么?