We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
运行
lr.d.sqrl a1, (a3)
的时候,U740的第0个核产生了错误(mcause=5),说明访存异常;但是misa表示S7核支持A扩展,检查参数a3的对齐正确。
S7核的文档有以下的描述:
3.6 原子内存操作 针对内部内存区域,S7核支持RISC-V标准的原子(A)扩展。 保留加载(LR)和条件存储(SC)指令是特殊的原子指令,它们只在数据可缓存的预取被支持。 S7核并没有这样的数据缓存,所以LR和SC指令永远产生一个准确的访存异常。
3.6 原子内存操作
针对内部内存区域,S7核支持RISC-V标准的原子(A)扩展。
保留加载(LR)和条件存储(SC)指令是特殊的原子指令,它们只在数据可缓存的预取被支持。 S7核并没有这样的数据缓存,所以LR和SC指令永远产生一个准确的访存异常。
S7小核上没有DCACHE,所以不存在LR/SC指令。另外,AMO系列指令是可用的。
方案1:不使用spin::Mutex的实现,使用规范推荐的(RISC-V非特权指令规范,图9.2)Amoswap互斥操作实现。
方案2(绕过问题):不使用S7核做spin::Mutex锁操作,用U74核做锁操作。
(感谢TUNA技术群的@dramforever和@Sequencer)