硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3093|回复: 13
收起左侧

C代码获取M内核寄存器数值方法

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2021-10-19 12:37:50 | 显示全部楼层 |阅读模式
比如获R4寄存器

  1. __STATIC_INLINE uint32_t __get_R4(void)
  2. {
  3.   register uint32_t __regR4          __ASM("r4");
  4.   return(__regR4);
  5. }
复制代码


回复

使用道具 举报

18

主题

309

回帖

363

积分

高级会员

积分
363
发表于 2021-10-24 20:53:17 | 显示全部楼层
少个等号?这样__regR4 = __ASM("r4");  ???
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2021-10-25 02:17:08 | 显示全部楼层
木兰花 发表于 2021-10-24 20:53
少个等号?这样__regR4 = __ASM("r4");  ???

没有少,就是这样的定义的。
回复

使用道具 举报

18

主题

309

回帖

363

积分

高级会员

积分
363
发表于 2021-10-25 12:38:28 | 显示全部楼层
eric2013 发表于 2021-10-25 02:17
没有少,就是这样的定义的。

这是什么语法,看不懂啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2021-10-26 12:02:18 | 显示全部楼层
木兰花 发表于 2021-10-25 12:38
这是什么语法,看不懂啊

MDK里面带的方式,我也是照葫芦画瓢搞了个,测试可用
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2022-7-26 12:04:21 | 显示全部楼层
您好,请问是将代码放到哪里,我就把代码单独拎主函数好多报错点 然后在core_cm3.h中找到了类似的函数 把给的代码放进去 进行声明 依然报错
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2022-7-26 12:55:36 | 显示全部楼层
火车跑步机 发表于 2022-7-26 12:04
您好,请问是将代码放到哪里,我就把代码单独拎主函数好多报错点 然后在core_cm3.h中找到了类似的函数 把给 ...

升级你的CMSIS软件包到最新的5.9.0就可以了。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2022-7-27 09:41:10 | 显示全部楼层
eric2013 发表于 2022-7-26 12:55
升级你的CMSIS软件包到最新的5.9.0就可以了。

您好 报错解决了 好像是把那个__STATIC换成小写就行 还想问下大佬,这个是读取出R4寄存器的值而不是地址

The ASM command displays or sets the current assembly address, or assembles an instruction.
ASM 命令显示或设置当前汇编地址,或汇编一条指令。

这两句话是在keil的heip 里面搜索 ASM找到的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2022-7-27 10:15:35 | 显示全部楼层
火车跑步机 发表于 2022-7-27 09:41
您好 报错解决了 好像是把那个__STATIC换成小写就行 还想问下大佬,这个是读取出R4寄存器的值而不是地址
...

1、新版CMSIS已经有__STATIC定义了。
2、R寄存器不在内存映射地址上,他是独立的控制单元。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2022-7-27 14:16:36 | 显示全部楼层
eric2013 发表于 2022-7-27 10:15
1、新版CMSIS已经有__STATIC定义了。
2、R寄存器不在内存映射地址上,他是独立的控制单元。

明白了,那请问操作R寄存器是不是只能用汇编语言来操作
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2022-7-29 09:12:02 | 显示全部楼层
火车跑步机 发表于 2022-7-27 14:16
明白了,那请问操作R寄存器是不是只能用汇编语言来操作

楼主位的不就是C方式。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2022-7-31 10:50:38 | 显示全部楼层
eric2013 发表于 2022-7-29 09:12
楼主位的不就是C方式。

那请问对R寄存器写操作是使用汇编吗
回复

使用道具 举报

0

主题

20

回帖

20

积分

新手上路

积分
20
发表于 2024-10-9 16:50:52 | 显示全部楼层
有用,但是连续读取好像因为自己写法问题就被优化掉了。但是谢谢楼主了
微信截图_20241009165027.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
 楼主| 发表于 2024-10-10 08:34:59 | 显示全部楼层
wonderfullook 发表于 2024-10-9 16:50
有用,但是连续读取好像因为自己写法问题就被优化掉了。但是谢谢楼主了

还有一点,只有CPU运行,寄存器就是不断变化的。

所以用调试器将CPU暂停后,读取当前寄存器值是最好的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 13:51 , Processed in 0.048231 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表