itrue 发表于 2024-7-3 09:23

keil mm32f5333编译问题咨询

mdk 5.38编译 mm32f5333,移植一个工程代码时,编译报错,不支持csrr汇编指令,但是我查了一下f5333使用是armv8架构,应该是支持csrr这个汇编指令的,请问有哪位大神知道这个是为什么吗?要如何解决

sujingliang 发表于 2024-7-3 12:34

在RISC-V架构的汇编语言中,csrr 指令用于从控制和状态寄存器(CSR, Control and Status Register)中读取值到通用寄存器中。这条指令特别用于访问RISC-V的特定硬件特性,如时钟、性能计数器等。

在你给出的指令 csrr r0, timeh 中:

csrr 是“Control and Status Register Read”的缩写,表示这是一个从CSR读取数据到通用寄存器的指令。
r0 是目标通用寄存器的编号,RISC-V架构中,r0 通常被用作零寄存器,其值始终为零。然而,在一些上下文中,使用 r0 作为目标寄存器来读取CSR的值是合法的,尽管这种用法可能不常见或特定于某些应用场景。通常,我们会选择一个非零的寄存器来存储读取的值。
timeh 是被读取的CSR的名称。在RISC-V中,timeh 寄存器通常用于存储高32位的时间计数器值。RISC-V的时间计数器是一个64位的计数器,它以一定的频率(如时钟频率)递增,可以用来测量时间间隔或作为系统运行的基准。timeh 寄存器包含了这个64位计数器的高32位,而另一个CSR(如timel)则包含低32位。

好像csrr是RISC-V下的指令。我对汇编一窍不通,上面是文心一言的答复。

probedog 发表于 2024-7-9 16:01

检查一下指令名称是否有误

stormwind123 发表于 2024-7-9 22:23

手动修改汇编代码

itrue 发表于 2024-7-10 09:26

sujingliang 发表于 2024-7-3 12:34
在RISC-V架构的汇编语言中,csrr 指令用于从控制和状态寄存器(CSR, Control and Status Register)中读取 ...

嗯,我查了确实也是这个解释,但是mm32f5333也是armv8架构,理论上应该是支持这指令的

laocuo1142 发表于 2024-7-10 16:00

汇编器或编译器设置是否正确

powerantone 发表于 2024-7-10 16:00

更新MDK-ARM 到最新版本,旧版本的编译器和工具链可能不完全支持最新的 ARM 架构特性。

地瓜patch 发表于 2024-7-30 22:10

不管啥架构,从编程上来硕差别大么?
页: [1]
查看完整版本: keil mm32f5333编译问题咨询