硬汉嵌入式论坛

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

[STM32H7] 在程序中获取PC的值报错,如何解决

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-7-26 10:38:36 | 显示全部楼层 |阅读模式
请教:
为了监测程序偶发的卡死的原因,设想能够获取PC的值,当程序卡死的时候通过PC值来查找引起卡死的出处或原因。
在keil的调试界面,可以通过观察R15(PC)来看到PC值;但在程序代码中,通过试图函数print_pc()获取PC值却未能成功。

使用的获取PC值的代码如下:
void print_pc()
{
        unsigned int pc_val;
        __asm("mov %[result],pc":[result]"=r"(pc_val));
//        printf("pc=0x%x\n",pc_val);
}

将如上段代码,放入V7-009工程中 int main(void) 前,Build报错:..\..\User\main.c(42): error:  #18: expected a ")"

错误是出在了哪里呢?该如何实现预期的功能?

回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2023-7-26 16:13:37 | 显示全部楼层
按照你的需求来说,你需要的并不是PC值,而是回溯堆栈来查看方法调用和局部变量,推荐使用cmbacktrace之类的库来实现这种功能
回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
发表于 2023-7-26 21:08:59 | 显示全部楼层
armcc好像不支持这种内嵌汇编方式,换clang或者gcc试试
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2023-7-27 06:57:28 | 显示全部楼层
这个获取的是此函数的位置,分享三个供参考

1、https://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

下载 (7).png

2、视频教程第6期:MDK专题进阶,Cortex-M内核芯片Hardfault硬件异常调试分析定位
https://www.armbbs.cn/forum.php?mod=viewthread&tid=110982

3、基于H7-TOOL的硬件异常黑盒子功能V1.0版本操作说明,持续更新
https://www.armbbs.cn/forum.php?mod=viewthread&tid=114792
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2023-7-27 10:14:41 | 显示全部楼层
收到,谢谢大家指导!我稍后试试新的办法!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 17:49 , Processed in 0.168965 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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