打印
[MM32软件]

keil mm32f5333编译问题咨询

[复制链接]
1065|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
itrue|  楼主 | 2024-7-3 09:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
mdk 5.38编译 mm32f5333,移植一个工程代码时,编译报错,不支持csrr汇编指令,但是我查了一下f5333使用是armv8架构,应该是支持csrr这个汇编指令的,请问有哪位大神知道这个是为什么吗?要如何解决

IMG_20240703_092256.jpg (251.03 KB )

IMG_20240703_092256.jpg

使用特权

评论回复
沙发
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 | 只看该作者
手动修改汇编代码

使用特权

评论回复
5
itrue|  楼主 | 2024-7-10 09:26 | 只看该作者
sujingliang 发表于 2024-7-3 12:34
在RISC-V架构的汇编语言中,csrr 指令用于从控制和状态寄存器(CSR, Control and Status Register)中读取 ...

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

使用特权

评论回复
6
laocuo1142| | 2024-7-10 16:00 | 只看该作者
汇编器或编译器设置是否正确

使用特权

评论回复
7
powerantone| | 2024-7-10 16:00 | 只看该作者
更新MDK-ARM 到最新版本,旧版本的编译器和工具链可能不完全支持最新的 ARM 架构特性。

使用特权

评论回复
8
地瓜patch| | 2024-7-30 22:10 | 只看该作者
不管啥架构,从编程上来硕差别大么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

9

帖子

0

粉丝