【发布时间】:2017-06-23 15:25:47
【问题描述】:
当我在 ARM cortex-M4 (Thumb) 上遇到故障处理程序时,我会在故障发生之前获得 CPU 寄存器的快照。有了这些信息,我可以找到它所在的堆栈指针。现在,我想要的是回溯它传递的所有函数。我在这里看到的唯一问题是我没有帧指针,所以我无法真正看到某个子程序将 LR 无限保存在哪里。
如果帧指针在 r7 中不可用,如何解决这个问题?
【问题讨论】:
-
反汇编代码,看看栈上有什么。
-
你用的是什么调试器?我知道 Keil Uvision 上有一个调用堆栈。你是不是在绊倒某种陷阱?
-
@KooroshHajiani 我没有使用调试器,我的目标正在免费运行并且具有日志记录(printf 样式)功能。
-
在某些情况下,无法返回的函数(因为
while (1)或其他原因)不会推送 LR,因为它永远不会再次使用它。在这些情况下,您可以在 while (while (dummy == 0)) 中使用非常量对象全局变量来欺骗编译器,并使其认为函数可以返回。这是否符合您的问题?