尝试为Riscv编译FreeRtos。错误:指令csrr需要绝对表达式

时间:2018-08-09 03:29:17

标签: linux freertos riscv

我正在尝试使用riscv32-unknown-linux-gnu-gcc工具链编译FreeRTOS riscv_spike端口,但出现了错误

错误: ../../Source/portable/GCC/RISCV/port.c:121:错误:指令csrr需要绝对表达式

以下代码来自freeRtos源的port.c

    __asm volatile("csrr t0,mtime");
    __asm volatile("add t0,t0,%0" :: "r"(configTICK_CLOCK_HZ/configTICK_RATE_HZ));
    __asm volatile("csrw mtimecmp,t0");

谁能形容我需要做出哪些改变? 我想mtime,mtimecmp无效 我可以通过阅读规范在“编码”文件中添加此必需的定义吗?

谢谢

1 个答案:

答案 0 :(得分:1)

根据第3.1.15节中的riscv-privildged-v1.10,mtime和mtimecmp公开为内存映射的机器模式寄存器。通过存储(sw)和加载指令(lw)可以访问它们,而不是通过csr*指令来访问它们。

因此,它们依赖于平台实施-特别是其地址取决于平台。

您的代码无法汇编,因为csrrcsrw既期望值,也不期望您编写的表达式可重定位。但是,正如开头所述,您必须使用sw和lw指令-并确保实现了mtime&mtimecmp以及可以在哪个地址访问它们。