【发布时间】:2021-05-03 08:38:03
【问题描述】:
我想使用 C 程序访问 RISC-V 的寄存器文件。 有什么方法可以使用 C 程序直接写入和读取 RISC-V 的寄存器文件?
【问题讨论】:
-
访问寄存器如何实现您的目标?你的目标是什么是?
-
特别是,编译器也在使用这些寄存器。所以为了确定你会读到什么,或者你写的时候会发生什么,你必须更准确地定义你的问题。就目前而言,这可能是一个 XY 问题。
我想使用 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 所问:你想做什么?
【讨论】: