gpt4 book ai didi

linux - 尝试为 Riscv 编译 FreeRtos。错误 : Instruction csrr requires absolute expression

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:05 31 4
gpt4 key购买 nike

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

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

以下代码来自freeRtos Source的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 是无效的我可以通过阅读规范在“编码”文件中添加这个必需的定义吗?

谢谢,

最佳答案

根据 riscv-privildged-v1.10在 § 3.1.15 中,mtime 和 mtimecmp 作为内存映射机器模式寄存器公开。它们由存储 (sw) 和加载指令 (lw) 访问,而不是由 csr* 指令访问。

因此它们依赖于平台实现 - 特别是它们的地址依赖于平台。

您的代码无法组装,因为 csrrcsrw 需要一个值而不是您编写的可重定位表达式。但正如开头提到的,您必须使用 sw 和 lw 指令 - 并注意实现 mtime 和 mtimecmp 以及可以访问它们的地址。

关于linux - 尝试为 Riscv 编译 FreeRtos。错误 : Instruction csrr requires absolute expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51758391/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com