【问题标题】:Using C-program can I access register file of RISC-V?使用 C 程序可以访问 RISC-V 的寄存器文件吗?
【发布时间】:2021-05-03 08:38:03
【问题描述】:

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

【问题讨论】:

  • 访问寄存器如何实现您的目标?你的目标是什么
  • 特别是,编译器也在使用这些寄存器。所以为了确定你会读到什么,或者你写的时候会发生什么,你必须更准确地定义你的问题。就目前而言,这可能是一个 XY 问题。

标签: c riscv riscv32


【解决方案1】:

没有使用 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 所问:你想做什么?

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2020-08-27
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2022-06-15
    • 2021-02-09
    相关资源
    最近更新 更多